【发布时间】:2009-12-15 20:45:14
【问题描述】:
为什么会出现以下情况:
>>> u'\u0308'.encode('mbcs') #UMLAUT
'\xa8'
>>> u'\u041A'.encode('mbcs') #CYRILLIC CAPITAL LETTER KA
'?'
>>>
我有一个 Python 应用程序接受来自操作系统的文件名。它适用于某些国际用户,但不适用于其他用户。
例如,这个 unicode 文件名: u'\u041a\u0433\u044b\u044b\u0448\u0444\u0442'
不会使用 Windows 'mbcs' 编码(文件系统使用的编码,由 sys.getfilesystemencoding() 返回)进行编码。我得到'???????',表示编码器在这些字符上失败。但这没有任何意义,因为文件名一开始就来自用户。
更新:这是我背后原因的背景... 我的系统上有一个以西里尔文命名的文件。我想用该文件作为参数调用 subprocess.Popen() 。 Popen 不会处理 unicode。通常我可以使用 sys.getfilesystemencoding() 给出的编解码器对参数进行编码。在这种情况下它不起作用
【问题讨论】:
-
请添加有关 Popen 调用的信息:可执行文件是什么?是你写的吗?
-
可执行文件由我的团队编写;我们已经通过将命令行编码为 utf-8 并让调用的可执行文件对其进行解码来解决此问题。 (正如下面 John Machin 所建议的那样。谢谢!)
-
为了获得有效的答案,请发布有问题的代码的示例部分 (popen)。在任何情况下,调用 encode('mbcs') 都不会解决您的问题。任何将使用当前代码页的东西都不是有效的解决方案。