utils.shell_quote: Convert the args to unicode strings
The youtube test video failed with `UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 34: ordinal not in range(128)`, the problem was with the filenames being encoded.
This commit is contained in:
		| @@ -24,6 +24,8 @@ from youtube_dl.utils import ( | ||||
|     xpath_with_ns, | ||||
|     smuggle_url, | ||||
|     unsmuggle_url, | ||||
|     shell_quote, | ||||
|     encodeFilename, | ||||
| ) | ||||
|  | ||||
| if sys.version_info < (3, 0): | ||||
| @@ -170,6 +172,10 @@ class TestUtil(unittest.TestCase): | ||||
|         self.assertEqual(res_url, url) | ||||
|         self.assertEqual(res_data, None) | ||||
|  | ||||
|     def test_shell_quote(self): | ||||
|         args = ['ffmpeg', '-i', encodeFilename(u'ñ€ß\'.mp4')] | ||||
|         self.assertEqual(shell_quote(args), u"""ffmpeg -i 'ñ€ß'"'"'.mp4'""") | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|   | ||||
| @@ -951,7 +951,16 @@ class locked_file(object): | ||||
|  | ||||
|  | ||||
| def shell_quote(args): | ||||
|     return ' '.join(map(pipes.quote, args)) | ||||
|     quoted_args = [] | ||||
|     encoding = sys.getfilesystemencoding() | ||||
|     if encoding is None: | ||||
|         encoding = 'utf-8' | ||||
|     for a in args: | ||||
|         if isinstance(a, bytes): | ||||
|             # We may get a filename encoded with 'encodeFilename' | ||||
|             a = a.decode(encoding) | ||||
|         quoted_args.append(pipes.quote(a)) | ||||
|     return u' '.join(quoted_args) | ||||
|  | ||||
|  | ||||
| def takewhile_inclusive(pred, seq): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user