说我有以下代码 -多语言关注python代码?
homeDir = os.path.expanduser("~")
fullPath = homeDir + "/.config"
print fullPath
请问这代码仍然正常工作的人在说,日本,谁的主目录是由汉字的?
我的担心是python不知道如何将两种语言加在一起,甚至不知道如何处理外来字符。
说我有以下代码 -多语言关注python代码?
homeDir = os.path.expanduser("~")
fullPath = homeDir + "/.config"
print fullPath
请问这代码仍然正常工作的人在说,日本,谁的主目录是由汉字的?
我的担心是python不知道如何将两种语言加在一起,甚至不知道如何处理外来字符。
代码中所有来自问题的字符串都是字节串(字节序列)。它们可以表示任何内容,包括以某种字符编码编码的文本。
homeDir = os.path.expanduser("~") # input bytestring, returns bytestring
fullPath = homeDir + "/.config" # add 2 bytestrings
print fullPath
的print
的作品,但你可能会看到控制台垃圾,如果它使用不同的字符编码。否则,该代码将适用于任何语言,外国字符。
在Python 3中,或者如果from __future__ import unicode_literals
使用,字符串都是Unicode。在这种情况下,它也应该工作:
from __future__ import unicode_literals
homeDir = os.path.expanduser("~") # input Unicode, returns Unicode
fullPath = homeDir + "/.config" # add 2 Unicode strings
print(fullPath) # print Unicode
打印可能会失败(尝试设置适当的PYTHONIOENCODING
在这种情况下)。
在POSIX系统上,路径可能包含任意字节序列(零字节除外),包括那些无法使用文件系统编码进行解码的字节序列。从Python 3 docs:
在Python中,文件名,命令行参数和环境 变量是使用字符串类型来表示。在某些系统上, 在将 传递给操作系统之前,需要将这些字符串解码为字节和从字节解码。 Python使用文件系统编码 执行此转换(请参阅sys.getfilesystemencoding())。
版本3.1已更改:在某些系统上,使用文件 进行的系统编码转换可能会失败。在这种情况下,Python使用
surrogateescape
编码错误处理程序,这意味着在解码时不可译码的 字节被替换为Unicode字符U + DCxx,并且 将这些字节再次转换为编码时的原始字节。
这意味着fullPath
可能包含U+DCxx
代理人如果原始包含不可解码的字节,即使终端使用兼容的字符编码print(fullPath)
可能会失败。 os.fsencode(fullPath)
可以在需要时返回原始字节。
我会推荐阅读this presentation关于unicode和python编码来了解可能发生什么,以及如何解决它。
你可能想'os.path.join'而不是'+',虽然这不是你的问题的答案。 – user2357112
非常有趣但很好,它应该工作。你为什么不尝试一下呢? – aIKid
外语也只是零和一个。所以是的,通常它会起作用。不过,了解Unicode。 –