假设我有以下代码-
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文档:
在Python中,文件名,命令行参数和环境变量使用字符串类型表示。在某些系统上,在将这些字符串传递给操作系统之前,有必要对这些字符串进行字节解码。Python使用文件系统编码来执行此转换(请参见sys.getfilesystemencoding())。
在版本3.1中更改:在某些系统上,使用文件系统编码的转换可能会失败。在这种情况下,Python使用
surrogateescape
编码错误处理程序,这意味着无法解码的字节在解码时会被Unicode字符U + DCxx替换,并且在编码时会再次转换为原始字节。
这意味着,如果原始文件包含无法解码的字节,则fullPath
可能包含U+DCxx
代理,并且print(fullPath)
即使终端使用兼容的字符编码也可能失败。os.fsencode(fullPath)
如果需要,可以返回原始字节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句