Чтение «сырых» Unicode-строк в Python - PullRequest
1 голос
/ 26 мая 2009

Я довольно новичок в Python, поэтому мой вопрос может быть глупым, но, несмотря на то, что, прочитав множество тем, я не нашел ответа на свой вопрос.

У меня есть смешанный исходный документ, который содержит HTML, XML, латекс и другие текстовые форматы и который я пытаюсь получить в формате только для латекса.

Поэтому я использовал python для распознавания различных команд как регулярных выражений и замены их соответствующей латексной командой. Пока все отлично работает.

Теперь у меня остались какие-то "юникодные" знаки Unicode, такие как греческие буквы. К сожалению, это почти все, что можно сделать вручную. Поэтому я тоже ищу способ сделать это умным способом. Есть ли способ для Python распознавать / читать их? И как мне сказать Python распознавать / читать, например, Пи написано как греческое письмо?

Минимальный пример кода, который я использую:

fh = open('SOURCE_DOCUMENT','r')
stuff = fh.read()
fh.close()

new_stuff = re.sub('READ','REPLACE',stuff)
fh = open('LATEX_DOCUMENT','w')
fh.write(new_stuff)
fh.close()

Я не уверен, является ли это важной информацией или нет, но я использую Python 2.6, работающий в Windows.

Я был бы очень рад, если бы кто-то мог дать мне подсказку, по крайней мере, где найти соответствующую информацию или как это могло бы работать. Или я совершенно не прав, и Python не может сделать эту работу ...

Большое спасибо заранее.
Cheers,
Бритт

Ответы [ 3 ]

3 голосов
/ 26 мая 2009

Вы говорите о "сырых" строках Unicode. Что это значит? Сам по себе Юникод не является кодировкой, но существуют разные кодировки для хранения символов Юникода (прочитайте этот пост от Джоэла).

Функция open в Python 3.0 принимает необязательный аргумент encoding, который позволяет указать кодировку, например, UTF-8 (очень распространенный способ кодирования Unicode). В Python 2.x взгляните на модуль codecs , который также предоставляет функцию open , которая позволяет указать кодировку файла.

Редактировать: в качестве альтернативы, почему бы просто не оставить эти плохие символы и указать кодировку вашего файла LaTeX вверху:

\usepackage[utf8]{inputenc}

(Я никогда не пробовал этого, но я думаю, что это должно работать. Вам может нужно заменить utf8 на utf8x, хотя)

1 голос
/ 26 мая 2009
0 голосов
/ 26 мая 2009

Необходимо определить «кодировку» входного документа. Юникод может кодировать миллионы символов, но файлы могут содержать только 8-битные значения (0-255). Таким образом, текст Unicode должен быть каким-то образом закодирован.

Если документ представляет собой XML, он должен быть в первой строке (encoding = "..."; "utf-8" является значением по умолчанию, если нет поля "encoding"). Для HTML ищите «charset».

Если ничего не помогает, откройте документ в редакторе, где вы можете установить кодировку (например, jEdit ). Попробуйте их, пока текст не будет выглядеть правильно. Затем используйте это значение в качестве параметра encoding для codecs.open() в Python.

...