在python中使用UTF-16编码

时间:2016-04-21 08:25:12

标签: python utf-16

我尝试使用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 ='东京'

1 个答案:

答案 0 :(得分:1)

您显示的代码中的所有内容(几乎)都很好。你有一个用utf-8编码的源文件(正如你对file命令的结果的评论所述),所以行

dir_name_1 = '東京'

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

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

唯一的问题是在第27行(你没有显示)你正在用utf8编码的字符串做一些事情,可能试图将它(明确地或隐含地)转换为unicode 而不指定任何编码,因此ascii被视为默认值,因此错误是正常的,因为\xe6不在ascii范围内。您应该使用dir_name_1.decode('utf8')

明确地解码字符串