2024-04-20 06:27:54 发布
网友
如何正确阅读日文和汉字。 我正在使用Python2.5。输出显示为"E:\Test\?????????"
"E:\Test\?????????"
path = r"E:\Test\は最高のプログラマ" t = path.encode() print t u = path.decode() print u t = path.encode("utf-8") print t t = path.decode("utf-8") print t
请阅读Python Unicode HOWTO;它解释了如何在Python代码中处理和包含非ASCII文本。
如果要在代码中包含日文文本,可以使用以下几种选项:
使用unicode文本(创建unicode对象而不是字节字符串),但是任何非ascii码位都由unicode转义字符表示。它们的形式是\uabcd,所以是一个反斜杠、一个u和四个十六进制数字:
unicode
\uabcd
u
ru = u'\u30EB'
将是一个字符,片假名“ru”码位(“ル”)。
使用unicode文本,但以某种编码形式包含字符。文本编辑器将以给定的编码(例如,UTF-16)保存文件;您需要在源文件的顶部声明该编码:
# encoding: utf-16 ru = u'ル'
其中包含“ル”,而不使用转义符。Python 2文件的默认编码是ASCII,因此通过声明一种编码,可以直接使用日语。
使用字节字符串文本,即已编码。用其他方法对代码点进行编码,并将它们包含在字节字符串文本中。如果你要做的就是以编码的形式使用它们,这应该没问题:
ru = '\xeb\x30' # ru encoded to UTF16 little-endian
我将“ル”编码为UTF-16 little endian,因为这是默认的Windows NTFS文件名编码。
下一个问题将是你的终端,Windows控制台是臭名昭著的不支持许多字符集的开箱即用。您可能希望将其配置为处理UTF-8。有关详细信息,请参见this question,但您需要在控制台中运行以下命令:
chcp 65001
要切换到UTF-8,您可能需要切换到可以处理代码点的控制台字体(Lucida可能?)。
有两个独立的问题:
如果使用非ascii字符并对表示文本的数据使用Unicode文本,则应指定Python源编码,例如:
# -*- coding: utf-8 -*- path = ur"E:\Test\は最高のプログラマ"
Printing Unicode to Windows console is complicated但如果设置了正确的字体,则只需:
print path
可能有用。
无论您的控制台是否可以显示路径,都可以将Unicode路径传递给文件系统函数,例如:
entries = os.listdir(path)
不要在bytestrings上调用.encode(char_enc),而是在Unicode字符串上调用它。 不要在Unicode字符串上调用.decode(char_enc),而是在bytestrings上调用它。
.encode(char_enc)
.decode(char_enc)
您应该将字符串强制为类似于unicode的对象
path = ur"E:\Test\は最高のプログラマ"
与2.5相关的字符串文本上的文档位于here
编辑:如果2.5中的对象是unicode,我不确定,但文档确实声明将处理\uXXXX[XXXX],并且字符串将是“Unicode字符串”。
\uXXXX[XXXX]
请阅读Python Unicode HOWTO;它解释了如何在Python代码中处理和包含非ASCII文本。
如果要在代码中包含日文文本,可以使用以下几种选项:
使用unicode文本(创建
unicode
对象而不是字节字符串),但是任何非ascii码位都由unicode转义字符表示。它们的形式是\uabcd
,所以是一个反斜杠、一个u
和四个十六进制数字:将是一个字符,片假名“ru”码位(“ル”)。
使用unicode文本,但以某种编码形式包含字符。文本编辑器将以给定的编码(例如,UTF-16)保存文件;您需要在源文件的顶部声明该编码:
其中包含“ル”,而不使用转义符。Python 2文件的默认编码是ASCII,因此通过声明一种编码,可以直接使用日语。
使用字节字符串文本,即已编码。用其他方法对代码点进行编码,并将它们包含在字节字符串文本中。如果你要做的就是以编码的形式使用它们,这应该没问题:
我将“ル”编码为UTF-16 little endian,因为这是默认的Windows NTFS文件名编码。
下一个问题将是你的终端,Windows控制台是臭名昭著的不支持许多字符集的开箱即用。您可能希望将其配置为处理UTF-8。有关详细信息,请参见this question,但您需要在控制台中运行以下命令:
要切换到UTF-8,您可能需要切换到可以处理代码点的控制台字体(Lucida可能?)。
有两个独立的问题:
如果使用非ascii字符并对表示文本的数据使用Unicode文本,则应指定Python源编码,例如:
Printing Unicode to Windows console is complicated但如果设置了正确的字体,则只需:
可能有用。
无论您的控制台是否可以显示路径,都可以将Unicode路径传递给文件系统函数,例如:
不要在bytestrings上调用
.encode(char_enc)
,而是在Unicode字符串上调用它。不要在Unicode字符串上调用
.decode(char_enc)
,而是在bytestrings上调用它。您应该将字符串强制为类似于
unicode
的对象与2.5相关的字符串文本上的文档位于here
编辑:如果2.5中的对象是
unicode
,我不确定,但文档确实声明将处理\uXXXX[XXXX]
,并且字符串将是“Unicode字符串”。相关问题 更多 >
编程相关推荐