Browse Source

Bugfix for ebe1b4e34f43c3acad30e4bcb8484681a030c114

pukkandan 1 year ago
parent
commit
1619ab3e67
2 changed files with 8 additions and 4 deletions
  1. 2 0
      test/test_YoutubeDL.py
  2. 6 4
      yt_dlp/YoutubeDL.py

+ 2 - 0
test/test_YoutubeDL.py

@@ -630,6 +630,7 @@ class TestYoutubeDL(unittest.TestCase):
         self.assertEqual(test_dict['playlist'], 'funny videos')
 
     outtmpl_info = {
+        'id': '1234',
         'id': '1234',
         'ext': 'mp4',
         'width': None,
@@ -754,6 +755,7 @@ class TestYoutubeDL(unittest.TestCase):
         test('%(ext)c', 'm')
         test('%(id)d %(id)r', "1234 '1234'")
         test('%(id)r %(height)r', "'1234' 1080")
+        test('%(title5)a %(height)a', (R"'\xe1\xe9\xed \U0001d400' 1080", None))
         test('%(ext)s-%(ext|def)d', 'mp4-def')
         test('%(width|0)04d', '0')
         test('a%(width|b)d', 'ab', outtmpl_na_placeholder='none')

+ 6 - 4
yt_dlp/YoutubeDL.py

@@ -1328,17 +1328,19 @@ class YoutubeDL:
                     value = str(value)[0]
                 else:
                     fmt = str_fmt
-            elif fmt[-1] not in 'rs':  # numeric
+            elif fmt[-1] not in 'rsa':  # numeric
                 value = float_or_none(value)
                 if value is None:
                     value, fmt = default, 's'
 
             if sanitize:
+                # If value is an object, sanitize might convert it to a string
+                # So we convert it to repr first
                 if fmt[-1] == 'r':
-                    # If value is an object, sanitize might convert it to a string
-                    # So we convert it to repr first
                     value, fmt = repr(value), str_fmt
-                if fmt[-1] in 'csr':
+                elif fmt[-1] == 'a':
+                    value, fmt = ascii(value), str_fmt
+                if fmt[-1] in 'csra':
                     value = sanitizer(initial_field, value)
 
             key = '%s\0%s' % (key.replace('%', '%\0'), outer_mobj.group('format'))