2009-07-14 12 views
2

Je dois utiliser des caractères spéciaux dans mon application python. Par exemple: ƃ J'ai des informations comme ceci:Caractères spéciaux en Python

U+0183 LATIN SMALL LETTER B WITH TOPBAR 

General Character Properties 

In Unicode since: 1.1 
Unicode category: Letter, Lowercase 

Various Useful Representations 

UTF-8: 0xC6 0x83 
UTF-16: 0x0183 

C octal escaped UTF-8: \306\203 
XML decimal entity: &# 387; 

Mais quand je seulement des symboles Pust en python-script, je reçois une erreur:

Non-ASCII character '\xc8' ... How can i use it in strings for my application?

Répondre

11

Vous devriez dire à l'interprète que vous encoding » re en utilisant, car apparemment sur votre système, il est par défaut ascii. Voir PEP 263. Dans votre cas, placez le suivant en haut de votre fichier:

# -*- coding: utf-8 -*- 

Notez que vous ne devez pas écrire exactement cela; PEP 263 permet plus de liberté, pour accueillir plusieurs éditeurs populaires qui utilisent des conventions légèrement différentes dans le même but. De plus, cette chaîne peut également être placée sur la deuxième ligne, par ex. lorsque le premier est utilisé pour le shebang.

1

Stockez-vous le fichier Python au format UTF-8? Votre éditeur prend-il en charge UTF-8? Utilisez-vous des chaînes Unicode comme ça?

foo = u'ƃƃƃƃƃ' 
+0

Je ne comprends pas pourquoi le downvote, puisque la question est si vague. +1 –

+0

essayez les 4 variantes - avec et sans "codage:" et avec et sans u "" - et vous verrez que le codage: fait la différence, pas la chaîne unicode – hop

+0

@hop: Je parle français, donc comprendre comment utiliser des caractères non-ASCII était l'une des premières choses que j'ai faites en apprenant Python. :) Si vous utilisez des chaînes brutes, cela ne fonctionnera que si la plate-forme gère UTF-8 (ou quel que soit l'encodage que vous utilisez). Il est donc utile que PO sache qu'elle doit utiliser des chaînes Unicode. Comme elle n'a même pas fourni d'échantillon, je ne vois pas comment on peut reprocher aux répondeurs de ne pas être assez précis. –

0

Déclarez les chaînes Unicode.

somestring = u'æøå »

3

Alors que les réponses à ce prix sont corrects, je pensais que je fournir un traitement plus complet:

La façon la plus simple de représenter une le caractère non-ASCII dans un littéral de script est d'utiliser le préfixe u et U ou U s'échappe, comme ceci:

print u"Look \u0411\u043e\u0440\u0438\u0441, a G-clef: \U0001d11e" 

Ceci illustre:

  1. en utilisant le préfixe u pour vous assurer que la chaîne est un objet unicode
  2. en utilisant l'évasion u pour les caractères dans le plan multilingue de base (U + FFFD et ci-dessous)
  3. en utilisant l'échappement U pour les caractères dans d'autres plans (U + 10000 et plus)
  4. que Ƃ (U + 0182 LETTRE MAJUSCULE LATINE B AVEC LE TOPBAR) et Б (U + 0411 CYRILLIC CAPTIAL LETTER BE) juste un exemple de beaucoup de semblables Points de code Unicode

Le codage de script par défaut pour Python qui fonctionne partout est ASCII. En tant que tel, vous devez utiliser les échappements ci-dessus pour encoder des littéraux de caractères non-ASCII.Vous pouvez informer l'interpréteur Python de l'encodage de votre script avec une ligne comme:

# -*- coding: utf-8 -*- 

Cela ne modifie que l'encodage de votre script. Mais alors vous pouvez écrire:

print u"Look Борис, a G-clef: " 

Notez que vous devez toujours utiliser le préfixe u pour obtenir un objet unicode, pas un objet str.

Enfin, il est possible de modifier le codage par défaut utilisé pour str ... mais pas recommandé, car il est un changement global et risque de ne pas jouer avec d'autres code python.

Questions connexes