有关python代码的多语言关注?

约书亚·斯特罗

假设我有以下代码-

homeDir = os.path.expanduser("~")
fullPath = homeDir + "/.config"
print fullPath

对于某些人来说,例如日本(其主目录由汉字组成),此代码是否仍然可以正常运行?

我担心的是,python将不知道如何将两种语言加在一起,甚至不知道如何处理外来字符。

f

问题中代码中的所有字符串都是字节字符串(字节序列)。它们可以代表任何内容,包括以某种字符编码方式编码的文本。

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章