2009-05-26 7 views
1

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

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

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

Теперь у меня есть некоторые знаки типа «raw-type» Unicode, такие как греческие буквы. Unfortunaltly почти готов сделать это вручную. Поэтому я ищу способ сделать это умным способом. Есть ли способ для 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 работает на окнах.

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

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

+0

Просьба привести пример для «необработанных символов Unicode», о которых вы говорите. Я уверен, что никто в мире не использовал или не слышал этот термин раньше. –

+0

Что значит «узнавать»? Python вполне способен обрабатывать строки unicode, но вы не объясняете, что вы хотите с ними делать, и что не работает в данный момент. –

+0

Проблема в том, что латекс не любит символы Юникода? Если это так, [этот вопрос] (http://stackoverflow.com/questions/219853/entering-unicode-characters-in-latex) может помочь. –

ответ

3

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

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

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

\usepackage[utf8]{inputenc} 

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

+0

Что я подразумеваю под «сырым» Unicode, так это то, что знак не представлен кодом, но сам символ находится в тексте, как, например, вставьте в Word над . Примером может служить символ «capital pi», который, к сожалению, неправильно кодируется как & # x03A0; (который можно легко отобразить в LaTeX с помощью пакета utf8 (x)). Если я открываю текст с символами в латексе, он просто не отображается вообще, и информация теряется, поэтому мне нужно позаботиться об этом. Но я собираюсь взглянуть на другой намек относительно модуляции кодеков ... Спасибо :) –

+0

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

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^