2016-03-21 3 views
1

У меня вопрос о кодировке Python 2. Я пытаюсь декодировать строку ASCII, которая содержит код Unicode письма в Unicode, а затем закодировать его на латиницу 1, но без успеха. Вот иллюстрация:Преобразование ASCII в проблему кодирования Unicode

In[27]: d = u'\u010d' 

In[28]: print d.encode('utf-8') 

č 

In[29]: d1 = '\u010d' 

In[30]: d1.decode('ascii').encode('utf-8') 

Out[30]: '\\u010d' 

Я хотел бы преобразовать '\u010d' в 'č'. Существуют ли встроенные решения, чтобы избежать замены пользовательской строки?

+0

Во-первых, строка ASCII никогда не может содержать символы с акцентом, такие как č, потому что они не являются частью ASCII. Python строго говорит об этом, он не интерпретирует ASCII как «все, что использует один байт на символ». Теперь, если вы использовали 'unicode' Python вместо' str' для хранения строк, вы могли бы сохранить этот символ и, возможно, также преобразовать его в представление Latin-1 bytewise. Я бы посоветовал вам обновить Python 3, хотя он лучше разработан для разных кодировок. –

ответ

1

Когда вы

d1 = '\u010d' 

вы на самом деле получить эту строку:

In [3]: d1 
Out[3]: '\\u010d' 

Это происходит потому, что «нормальные» (не Unicode) строки не распознает последовательность \unnnn побега и, следовательно, преобразовать это буквальная обратная косая черта, а затем unnnn.

Для того, чтобы расшифровать, что вам нужно использовать unicode_escape codec:

In [4]: print d1.decode("unicode_escape").encode('utf-8') 
č 

Но, конечно, вы не должны использовать управляющие последовательности Unicode в не-Unicode строк в первую очередь.

+0

Спасибо, решил мою проблему! –