web-dev-qa-db-fra.com

Comment puis-je convertir Unicode en majuscule pour l'imprimer?

J'ai ceci:

>>> print 'example'
example
>>> print 'exámple'
exámple
>>> print 'exámple'.upper()
EXáMPLE

Ce que je dois faire pour imprimer:

EXÁMPLE

(où le 'A' obtient son accent d'accueille, mais en majuscule.

J'utilise Python 2.6.

38
Alex. S.

Je pense que c'est aussi simple que non Conversion de ASCII en premier.

 >>> print u'exámple'.upper()
 EXÁMPLE
59
tylerl

IN python 2.x, il suffit de convertir la chaîne en unicode avant d'appeler la tige supérieure (). Utilisation de votre code, qui est au format UTF-8 sur cette page Web:

>>> s = 'exámple'
>>> s
'ex\xc3\xa1mple'  # my terminal is not utf8. c3a1 is the UTF-8 hex for á
>>> s.decode('utf-8').upper()
u'EX\xc1MPLE'  # c1 is the utf-16 aka unicode for á

L'appel à decode prend de son format actuel à UNICODE. Vous pouvez ensuite le convertir en un autre format, comme UTF-8, à l'aide de l'encode. Si le personnage était dans, disons, ISO-8859-2 (tchèque, etc., dans ce cas), vous utiliseriez plutôt s.decode('iso-8859-2').upper().

Comme dans mon cas, si votre terminal n'est pas unicode/UTF-8 conforme, le mieux que vous puissiez espérer, soit une représentation hexagonale des caractères (comme la mine) ou de la convertir à l'aide de s.decode('utf-8').upper().encode('ascii', 'replace'), qui Résultats dans 'Ex? Mple'. Si vous ne pouvez pas créer votre terminal Afficher Unicode, écrivez la sortie dans un fichier au format UTF-8 et ouvrez cela dans votre éditeur préféré.

18
Jarret Hardie

Je pense qu'il y a un peu de contexte nous manquons ici:

>>> type('hello')
<type 'str'>

>>> type(u'hello')
<type 'unicode'>

Tant que vous utilisez des chaînes "unicode" au lieu de cordes "natif", les opérateurs comme Upper () fonctionneront avec unicode à l'esprit. FWIW, =Python 3 utilise UNICODE par défaut, en faisant la distinction largement non pertinente.

Prendre une chaîne de unicode à str _ puis retour à unicode est sous-optimal à bien des égards et de nombreuses bibliothèques produiront une sortie Unicode si vous le souhaitez; Essayez donc d'utiliser uniquement unicode objets pour les chaînes interne chaque fois que vous le pouvez.

4
tylerl