mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[utils] Add get_subprocess_encoding and filename/argument decode counterparts
				
					
				
			This commit is contained in:
		| @@ -371,6 +371,18 @@ def unescapeHTML(s): | ||||
|         r'&([^;]+);', lambda m: _htmlentity_transform(m.group(1)), s) | ||||
|  | ||||
|  | ||||
| def get_subprocess_encoding(): | ||||
|     if sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5: | ||||
|         # For subprocess calls, encode with locale encoding | ||||
|         # Refer to http://stackoverflow.com/a/9951851/35070 | ||||
|         encoding = preferredencoding() | ||||
|     else: | ||||
|         encoding = sys.getfilesystemencoding() | ||||
|     if encoding is None: | ||||
|         encoding = 'utf-8' | ||||
|     return encoding | ||||
|  | ||||
|  | ||||
| def encodeFilename(s, for_subprocess=False): | ||||
|     """ | ||||
|     @param s The name of the file | ||||
| @@ -382,21 +394,24 @@ def encodeFilename(s, for_subprocess=False): | ||||
|     if sys.version_info >= (3, 0): | ||||
|         return s | ||||
|  | ||||
|     if sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5: | ||||
|         # Pass '' directly to use Unicode APIs on Windows 2000 and up | ||||
|         # (Detecting Windows NT 4 is tricky because 'major >= 4' would | ||||
|         # match Windows 9x series as well. Besides, NT 4 is obsolete.) | ||||
|         if not for_subprocess: | ||||
|             return s | ||||
|         else: | ||||
|             # For subprocess calls, encode with locale encoding | ||||
|             # Refer to http://stackoverflow.com/a/9951851/35070 | ||||
|             encoding = preferredencoding() | ||||
|     else: | ||||
|         encoding = sys.getfilesystemencoding() | ||||
|     if encoding is None: | ||||
|         encoding = 'utf-8' | ||||
|     return s.encode(encoding, 'ignore') | ||||
|     # Pass '' directly to use Unicode APIs on Windows 2000 and up | ||||
|     # (Detecting Windows NT 4 is tricky because 'major >= 4' would | ||||
|     # match Windows 9x series as well. Besides, NT 4 is obsolete.) | ||||
|     if not for_subprocess and sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5: | ||||
|         return s | ||||
|  | ||||
|     return s.encode(get_subprocess_encoding(), 'ignore') | ||||
|  | ||||
|  | ||||
| def decodeFilename(b, for_subprocess=False): | ||||
|  | ||||
|     if sys.version_info >= (3, 0): | ||||
|         return b | ||||
|  | ||||
|     if not isinstance(b, bytes): | ||||
|         return b | ||||
|  | ||||
|     return b.decode(get_subprocess_encoding(), 'ignore') | ||||
|  | ||||
|  | ||||
| def encodeArgument(s): | ||||
| @@ -408,6 +423,10 @@ def encodeArgument(s): | ||||
|     return encodeFilename(s, True) | ||||
|  | ||||
|  | ||||
| def decodeArgument(b): | ||||
|     return decodeFilename(b, True) | ||||
|  | ||||
|  | ||||
| def decodeOption(optval): | ||||
|     if optval is None: | ||||
|         return optval | ||||
|   | ||||
		Reference in New Issue
	
	Block a user