python中的中文和日文字符支持

时间:2013-02-04 08:29:37

标签: python python-2.5

如何正确阅读日文和中文字符。 我正在使用python 2.5。输出显示为"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

3 个答案:

答案 0 :(得分:13)

请阅读Python Unicode HOWTO;它解释了如何在Python代码中处理和包含非ASCII文本。

如果要在代码中包含日语文本文字,可以使用以下几种方法:

  • 使用unicode文字(创建unicode个对象而不是字节字符串),但任何非ascii代码点都由unicode转义字符表示。它们采用\uabcd的形式,所以反斜杠,u和4个十六进制数字:

    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也许?)。

答案 1 :(得分:4)

有两个独立的问题:

  1. 如果使用非ascii字符,则应指定Python源编码,并对表示文本的数据使用Unicode文字,例如:

    # -*- coding: utf-8 -*-
    path = ur"E:\Test\は最高のプログラマ"
    
  2. Printing Unicode to Windows console is complicated但如果您设置了正确的字体,那么只需:

    print path
    

    可能有用。

  3. 无论您的控制台是否可以显示路径;将Unicode路径传递给文件系统函数应该没问题,例如:

    entries = os.listdir(path)
    

    不要在字节串上调用.encode(char_enc),而是在Unicode字符串上调用它 不要在Unicode字符串上调用.decode(char_enc),而是在字节串上调用它。

答案 2 :(得分:2)

您应该强制该字符串为unicode对象,如

path = ur"E:\Test\は最高のプログラマ"

与2.5相关的字符串文字的文档位于here

编辑:如果对象是2.5中的unicode,我不肯定,但文档确实声明将处理\uXXXX[XXXX]并且字符串将是“一个Unicode字符串”。