2010-04-22 11 views
10

Questo è il mio codice:come stampare parola cinese nel mio codice .. usando python

print '哈哈'.decode('gb2312').encode('utf-8') 

... ed esso stampa:

SyntaxError: Non-ASCII character '\xe5' in file D:\zjm_code\a.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 

Come posso stampare '哈哈'?

Aggiornamento: Quando uso il seguente codice:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

print '哈哈' 

... la stampa 鍝堝搱. Non è quello che volevo ottenere.

Il mio IDE è Ulipad, si tratta di un bug con l'IDE?

secondo aggiornamento:

Questo codice stamperà i caratteri a destra:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 


print u'哈哈'.encode('gb2312') 

... e quando uso questo:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

a='哈哈' 
print a.encode('gb2312') 
Traceback (most recent call last): 
    File "D:\zjm_code\a.py", line 5, in <module> 
    print a.encode('gb2312') 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128) 

... o ..

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

a='哈哈' 
print unicode(a).encode('gb2312') 
Traceback (most recent call last): 
    File "D:\zjm_code\a.py", line 5, in <module> 
    print unicode(a).encode('gb2312') 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128) 

... non funziona. Come posso stampare la variabile a in modo appropriato?

grazie

+4

Come un consiglio dal connazionale, si dovrebbe votare più, pensare prima di chiedere, e di essere più bello :-) – Young

risposta

7

Per prima cosa è necessario dichiarare una codifica, come indicato dai messaggi di errore in modo così chiaro - ti dice addirittura di guardare here per i dettagli! La codifica è presumibilmente gb2312.

BTW, sarebbe più semplice (con la stessa dichiarazione di codifica) per fare

print u'哈哈'.encode('utf-8') 

e non si può nemmeno bisogno la parte encode, se il vostro sys.stdout ha un attributo encoding impostato correttamente (dipende dal vostro terminale , OS, ecc.).

+0

Ciao Alex, guarda l'updated2 – zjm1126

+0

@ zjm1126, effettua 'a = u'xxx'' – Young

+0

ma la 'a' è google-app-engine dammi, non posso cambiarlo – zjm1126

4

è necessario specificare la codifica del file di codice sorgente Python, qui è la codifica UTF-8. Va in alto a destra sotto il percorso dell'interprete python.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

Se si va al url in the error message si possono trovare ulteriori informazioni sulla specifica la codifica di un file sorgente Python.

Una volta specificata la codifica del file sorgente, non è necessario decodificare il testo.

1

Il seguente codice funziona per me:

# coding: utf8 
print u'哈哈'.encode('utf-8') 

Il #coding commento dice a Python la codifica del file stesso, in modo da poter inserire caratteri UTF-8 in esso direttamente. E se si parte da una stringa Unicode, non è necessario decodificarlo e ricodificarlo.

1

base al largo di risposta di Will McCutchen, questo funziona anche:

# coding: utf8 
print '哈哈' 
1

Non si può fare di codifica su caratteri Unicode. Encode è usato per tradurre tutti i caratteri codificati in unicode in un altro stile di codice. Non può essere utilizzato per unicode carattere.

Nella modalità controversa, la decodifica può essere utilizzata solo per caratteri non codificati in Unicode per la conversione in carattere unicode.

Se si dichiara una stringa con carattere "u" prima della stringa, si otterrà una stringa codificata in unicode. È possibile utilizzare isinstance (str, unicode) per rilevare se lo str è codificato in unicode.

Prova questo codice qui sotto. Suggerimento: in Windows con versione cinese, lo stile di codice predefinito è "gbk".

>>> a = '哈哈'
>>> b = u'哈哈'
>>> isinstance(a,unicode)
False
>>> isinstance(b,unicode)
True

>>> a
'\xb9\xfe\xb9\xfe'
>>> b
u'\u54c8\u54c8'

>>> a.decode('gbk')
u'\u54c8\u54c8'
>>> a_unicode = a.decode('gbk')
>>> a_unicode
u'\u54c8\u54c8'

>>> print a_unicode
哈哈
>>> a_unicode.encode('gbk') == a
True
>>> a_unicode == b
True

>>> a.encode('gbk')
Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: 'ascii' codec can't decode byte 0xb9 in position 0: ordinal not in range(128)

>>> b.decode('gbk')
Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

0

Controllare la codifica dei caratteri del terminale.

Sul mio terminale, prima ho impostato la codifica dei caratteri su utf-8, tutto va bene.

Quando l'ho impostato su GBK, il risultato è '鍝 堝 搱'.

Problemi correlati