2016-04-21 84 views
0

我试图使用UTF-16乐编码在python非ASCII字符,这里是代码的这个片断:使用UTF-16编码

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 ='东京'

+2

您能否包含产生此错误的完整示例? – 2016-04-21 08:27:36

+1

你的源代码是用utf-16编码编写的吗?用'file abc.py'检查。 –

+0

@MichelBillaud输出:UTF-8 Unicode Java程序文本 – Maddy

回答

0

所有(几乎)在您显示的代码中都很好。你必须以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不在cii范围。您应该明确解码字符串dir_name_1.decode('utf8')

+0

27行:'dir_name_1 ='东京''。我已经更新了这个帖子。 – Maddy

+0

如果可能,我如何获得UTF-16编码的字符?其中一条评论说源代码编辑器不支持UTF-16和UTF-32。 – Maddy

+0

我可以将它们添加到文件中并读取它们,指定内容是UTF-16编码的吗? – Maddy