2016-04-21 30 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