在 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')
显式解码字符串
我正在尝试使用 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')