2010-08-26 4 views
1

Je sauvé script dans l'encodage UTF-8.de remplacement pour u'string »

J'ai changé codepage sur les fenêtres à 65001.

Je suis sur python 2.6

Script # 1

# -*- coding: utf-8 -*- 
print u'Español' 
x = raw_input() 

Script # 2

# -*- coding: utf-8 -*- 
a = 'Español' 
a.encode('utf8') 
print a 
x = raw_input() 

Script # 1 , imprime le mot fin sans erreur, Script # 2 fait erreur:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xf1 in position 4: ordinal not in range(128)

Je veux être en mesure d'imprimer cette variable sans erreurs dynamiquement dans le script # 2. l'encodage ('utf8') a été mentionné à moi comme l'équivalent de faire u'string '

De toute évidence, ce n'est pas parce qu'il provoque des erreurs. Comment puis-je le faire les gens?

+0

Est-ce parce que vous ne l'avez pas préfixer la chaîne avec 'u'? Je suis habitué à Python 3. –

+0

Oui, je ne l'ai pas fait exprès. J'essayais de prouver comment la même chose peut être faite sur une variable dynamique, comme si vous lisiez des chaînes à partir d'un fichier par exemple. – russo

+0

(en Python 2x) 'u '...' 'est une vraie chaîne unicode (encodingless), si vous voulez convertir de la chaîne ordinaire, vous devez connaître son encodage, le processus de conversion de celui-ci en décodage de la chaîne unicode . l'encodage est utilisé pour 'u '...'' -> ''...'' (et vous devez indiquer l'encodage de résultat désiré) – mykhal

Répondre

4

pour le script # 2:

a = 'Español'   # In Python2 this is a string of bytes 
a = a.decode('utf-8') # This converts it to a unicode string 
print(a) 
7

Changer votre code à ce qui suit:

# -*- coding: utf-8 -*- 
a = 'Español' 
a = a.decode('utf8') 
print a 
x = raw_input() 

Decode spécifie comment la chaîne doit être lu , et renvoie la valeur. Faire les changements ci-dessus devrait résoudre votre problème.

Le problème est que les magasins de python une chaîne comme une liste d'octets, quel que soit l'encodage du fichier. Ce qui importe est de savoir comment ces octets sont lire, et c'est ce que nous faisons lorsque nous utilisons decode() et u''.