在POSIX系统上,它完全取决于您的控制台或终端如何配置这些字符串使用的编码。
在这些环境中,使用locale.getpreferredencoding()
来查询配置了什么编码,然后用它来解码字符串。这是不是万无一失的,但应该在控制台或终端正确配置时工作。
在特定情况下,你可能使用的是Windows系统配置为使用Windows Codepage 1252:
>>> '\x80'.decode('cp1252')
u'\u20ac'
>>> print '\x80'.decode('cp1252')
€
Windows不提供GetCommandLineW()
和CommandLineToArgvW()
功能检索命令行的Unicode值,然后解析那个值变成了一个类似于argv
的数组;从Python使用这个可以用ctypes
library来完成;释义this example这是你如何使用它:
from ctypes import WINFUNCTYPE, windll, POINTER, byref, c_int
from ctypes.wintypes import LPWSTR, LPCWSTR
GetCommandLineW = WINFUNCTYPE(LPWSTR)(("GetCommandLineW", windll.kernel32))
CommandLineToArgvW = WINFUNCTYPE(POINTER(LPWSTR), LPCWSTR, POINTER(c_int))(("CommandLineToArgvW", windll.shell32))
argc = c_int(0)
argv_unicode = CommandLineToArgvW(GetCommandLineW(), byref(argc))
您正在使用的操作系统会影响您编程的参数的编码方式。你在使用什么操作系统? –