2016-04-21 8 views
0

Я пытаюсь кодировать не-ASCII символов в Python с использованием UTF-16-ле, и вот фрагмент кода для этого:Использование UTF-16 кодирования в Python

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 

Edit:

Строка 27: dir_name_1 = '東京 '

+2

Можете ли вы включить полный пример, который создает эту ошибку? –

+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 закодированной строки, вероятно, пытается преобразовать его (явно или неявно) в юникод без указания кодировки , поэтому ascii берется как значение по умолчанию, а ошибка тогда нормальна с \xe6 в не в as cii. Вы должны явно декодировать строку с помощью dir_name_1.decode('utf8')

+0

Строка 27:' dir_name_1 = '東京' '. Я обновил сообщение с этим. – Maddy

+0

Как получить символы UTF-16, если это возможно? В одном из комментариев говорится, что UTF-16 и UTF-32 не поддерживаются для исходного редактора. – Maddy

+0

Могу ли я добавить их в файл и прочитать их, указав, что содержимое кодируется UTF-16? – Maddy