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, |     xpath_with_ns, | ||||||
|     smuggle_url, |     smuggle_url, | ||||||
|     unsmuggle_url, |     unsmuggle_url, | ||||||
|  |     shell_quote, | ||||||
|  |     encodeFilename, | ||||||
| ) | ) | ||||||
|  |  | ||||||
| if sys.version_info < (3, 0): | if sys.version_info < (3, 0): | ||||||
| @@ -170,6 +172,10 @@ class TestUtil(unittest.TestCase): | |||||||
|         self.assertEqual(res_url, url) |         self.assertEqual(res_url, url) | ||||||
|         self.assertEqual(res_data, None) |         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__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
| @@ -951,7 +951,16 @@ class locked_file(object): | |||||||
|  |  | ||||||
|  |  | ||||||
| def shell_quote(args): | 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): | def takewhile_inclusive(pred, seq): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz