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

use*_*113 6 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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 13

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

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

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

    ru = u'\u30EB'
    
    Run Code Online (Sandbox Code Playgroud)

    将是一个角色,片假名'ru'代码点('ル').

  • 使用unicode文字,但包含某种形式的编码字符.您的文本编辑器将以给定的编码保存文件(例如,UTF-16); 你需要在源文件的顶部声明该编码:

    # encoding: utf-16
    
    ru = u'?'
    
    Run Code Online (Sandbox Code Playgroud)

    其中包含'ル'而不使用转义.Python 2文件的默认编码是ASCII,因此通过声明编码可以直接使用日语.

  • 使用字节串文字,准备好编码.通过其他方式对代码点进行编码,并将它们包含在字节字符串文字中.如果您要使用它们,无论如何都要以编码形式使用它们,这应该没问题:

    ru = '\xeb\x30'  # ru encoded to UTF16 little-endian
    
    Run Code Online (Sandbox Code Playgroud)

    我将'ル'编码为UTF-16 little-endian,因为这是默认的Windows NTFS文件名编码.

下一个问题将是您的终端,Windows控制台因为不支持许多开箱即用的字符集而臭名昭着.您可能希望将其配置为处理UTF-8.有关详细信息,请参阅此问题,但您需要在控制台中运行以下命令:

chcp 65001
Run Code Online (Sandbox Code Playgroud)

切换到UTF-8,您可能需要切换到可以处理您的代码点的控制台字体(Lucida也许?).


jfs*_*jfs 5

有两个独立的问题:

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

    # -*- coding: utf-8 -*-
    path = ur"E:\Test\?????????"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将 Unicode 打印到 Windows 控制台很复杂,但如果您设置了正确的字体,则只需:

    print path
    
    Run Code Online (Sandbox Code Playgroud)

    可能工作。

不管你的控制台能否显示路径;将 Unicode 路径传递给文件系统函数应该没问题,例如:

entries = os.listdir(path)
Run Code Online (Sandbox Code Playgroud)

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


m.b*_*ley 3

你应该强制字符串成为一个unicode像这样的对象

\n\n
path = ur"E:\\Test\\\xe3\x81\xaf\xe6\x9c\x80\xe9\xab\x98\xe3\x81\xae\xe3\x83\x97\xe3\x83\xad\xe3\x82\xb0\xe3\x83\xa9\xe3\x83\x9e"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

编辑:我不确定该对象是否是unicode2.5 中的 a,但文档确实声明\\uXXXX[XXXX]将对其进行处理并且字符串将是“Unicode 字符串”。

\n