在 python 中使用 UTF-16 编码

Using UTF-16 encoding in python

我正在尝试使用 utf-16-le 对 python 中的非 ascii 字符进行编码,下面是代码片段:

import os
import sys

def run():
    print sys.getdefaultencoding()
    reload(sys)
    sys.setdefaultencoding('utf-16-le')
    print sys.getdefaultencoding()
    test_dir = unit_test_utils.get_test_dir("utkarsh")
    dir_name_1 = '東京'
    ....
    ....

if __name__ == '__main__':
    run()

当此代码为 运行 时,这是看到的错误:

# /u/bin/python-qs /root/python/tests/abc.py -c  /root/test.conf 
  File "/root/python/tests/abc.py", line 27
SyntaxError: Non-ASCII character '\xe6' in file /root/python/tests/abc.py on line 27, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

如何解决这个问题?我尝试将此行添加到文件的开头,但无济于事:

# -*- coding: utf-16-le -*-

这次的错误是:

# /u/bin/python-qs /root/python/tests/abc.py -c  /root/test.conf
  File "/root/python/tests/abc.py", line 2
    import os
import sys
...
...
if __name__ == '__main__':
    run()

    ^
SyntaxError: invalid syntax

编辑:

第 27 行:dir_name_1 = '东京'

您显示的代码(几乎)一切正常。您有一个以 utf-8 编码的源文件(如您对 file 命令结果的评论所述),因此行

dir_name_1 = '東京'

实际上是(因为您使用的是 Python 2.x):

dir_name_1 = '\xe6\x9d\xb1\xe4\xba\xac' # utf8 for 東京

唯一的问题是在第 27 行(您未能显示)您正在对那个 utf8 编码的字符串做一些事情,可能试图将它(显式或隐式)转换为 unicode 而不指定任何encoding,因此默认使用 ascii 并且错误是正常的,因为 \xe6 不在 ascii 范围内。您应该使用 dir_name_1.decode('utf8')

显式解码字符串