Строка ввода файла Python: как обрабатывать экранированные символы Юникода? - PullRequest
3 голосов
/ 11 мая 2010

В текстовом файле (test.txt) моя строка выглядит следующим образом:

Gro\u00DFbritannien

Читая его, Python избегает обратной косой черты:

>>> file = open('test.txt', 'r')
>>> input = file.readline()
>>> input
'Gro\\u00DFbritannien'

Как я могу интерпретировать это как юникод? decode() и unicode() не справятся с работой.

Следующий код записывает Gro\u00DFbritannien обратно в файл, но я хочу, чтобы он был Großbritannien

>>> input.decode('latin-1')
u'Gro\\u00DFbritannien'
>>> out = codecs.open('out.txt', 'w', 'utf-8')
>>> out.write(input)

Ответы [ 2 ]

8 голосов
/ 11 мая 2010

Вы хотите использовать кодек unicode_escape:

>>> x = 'Gro\\u00DFbritannien'
>>> y = unicode(x, 'unicode_escape')
>>> print y
Großbritannien

См. документы для огромного количества стандартных кодировок, которые являются частью стандартной библиотеки Python.

4 голосов
/ 11 мая 2010

Используйте встроенный кодек unicode_escape:

>>> file = open('test.txt', 'r')
>>> input = file.readline()
>>> input
'Gro\\u00DFbritannien\n'
>>> input.decode('unicode_escape')
u'Gro\xdfbritannien\n'

Вы также можете использовать codecs.open():

>>> import codecs
>>> file = codecs.open('test.txt', 'r', 'unicode_escape')
>>> input = file.readline()
>>> input
u'Gro\xdfbritannien\n'

Список стандартных кодировок доступен в документации Python: http://docs.python.org/library/codecs.html#standard-encodings

...