2009-05-26 11 views
1

Je suis un nouveau venu en Python, donc ma question pourrait être stupide, mais même si je lisais beaucoup de sujets, je n'ai pas trouvé de réponse à ma question.Lire des chaînes Unicode "crues" en Python

J'ai un document source mixte qui contient des formats de texte html, xml, latex et autres et que j'essaie d'obtenir dans un format latex seulement. Par conséquent, j'ai utilisé python pour reconnaître les différentes commandes comme des expressions régulières et les remplacer par la commande latex appropriée. Tout a bien fonctionné jusqu'à présent.

Maintenant, il me reste quelques signes Unicode "de type brut", tels que les lettres grecques. Malheureusement, il est sur le point de faire beaucoup à la main. Par conséquent, je cherche un moyen de le faire de la manière intelligente aussi. Y a-t-il un moyen pour Python de les reconnaître/les lire? Et comment puis-je dire à Python de reconnaître/lire par ex. Pi écrit comme une lettre grecque?

Un exemple minimal du code que j'utilise est:

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() 

Je ne suis pas sûr que ce soit une information importante ou non, mais je suis en utilisant Python 2.6 en cours d'exécution sur Windows.

Je serais vraiment heureux, si quelqu'un pourrait être en mesure de me donner un indice, au moins où trouver l'information correspondante ou comment cela pourrait fonctionner. Ou si je me trompe complètement, et Python ne peut pas faire ce travail ...

Merci beaucoup d'avance.
Cheers,
Britta

+0

Veuillez donner un exemple pour les "panneaux Unicode de type brut" dont vous parlez. Je suis sûr que personne dans le monde n'a utilisé ou entendu ce terme auparavant. –

+0

Que voulez-vous dire par «reconnaître»? Python est tout à fait capable de gérer les chaînes Unicode, mais vous n'expliquez pas ce que vous voulez en faire, et ce qui ne fonctionne pas pour le moment. –

+0

Est-ce que le latex n'aime pas les caractères Unicode? Si oui, [cette question] (http://stackoverflow.com/questions/219853/entering-unicode-characters-in-latex) pourrait aider. –

Répondre

3

Vous parlez de `` chaînes Unicode brutes ''. Qu'est-ce que ça veut dire? Unicode lui-même n'est pas un encodage, mais il existe différents encodages pour stocker les caractères Unicode (lire this post par Joel).

La fonction open dans Python 3.0 prend un argument facultatif encoding qui vous permet de spécifier le codage, par ex. UTF-8 (un moyen très courant d'encoder Unicode). En Python 2.x, jetez un oeil au module codecs, qui fournit également une fonction open qui permet de spécifier l'encodage du fichier.

Edit: alternative, pourquoi ne pas simplement laisser ces caractères pauvres, et préciser l'encodage de votre fichier LaTeX en haut:

\usepackage[utf8]{inputenc} 

(je ne ai jamais essayé, mais je me dis que cela devrait fonctionner Vous devez remplacer utf8 par utf8x, cependant)

+0

ce que je veux dire par "brut" Unicode est que le signe n'est pas représenté par un code, mais le symbole lui-même se trouve dans le texte, comme vous le feriez par exemple. insérer dans Word sur . Un exemple serait le symbole d'un «capital pi» qui n'est malheureusement pas correctement encodé sous & # x03A0; (qui peut être facilement affiché dans LaTeX en utilisant le paquetage utf8 (x)). Si j'ouvre le texte avec les symboles en latex, il ne s'affiche tout simplement pas et les informations sont perdues, donc je dois m'en occuper. Mais je vais jeter un oeil à l'autre indice concernant le module de codecs ... Merci :) –

+0

Dans ce cas, vous devez déterminer l'encodage du document d'entrée. Si le document est XML, il devrait être dans la première ligne (encoding = "..."; "utf-8" est la valeur par défaut). Pour HTML, cherchez "charset". –

0

Vous devez déterminer le "codage" du document d'entrée. Unicode peut encoder des millions de caractères, mais les fichiers ne peuvent contenir que des valeurs de 8 bits (0-255). Le texte Unicode doit donc être codé d'une manière ou d'une autre.

Si le document est XML, il devrait être dans la première ligne (encoding = "..."; "utf-8" est la valeur par défaut s'il n'y a pas de champ "encoding"). Pour HTML, cherchez "charset".

Si tout le reste échoue, ouvrez le document dans un éditeur où vous pouvez définir le codage (jEdit, par exemple). Essayez-les jusqu'à ce que le texte semble correct. Utilisez ensuite cette valeur en tant que paramètre encoding pour codecs.open() en Python.

Questions connexes