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