how to print chinese word in my code.. using python

zjm1126 picture zjm1126 · Apr 22, 2010 · Viewed 57.6k times · Source

This is my code:

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

...and it prints:

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

How do I print '哈哈'?

Update: When I use the following code:

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

print '哈哈'

... it prints 鍝堝搱. That isn't what I wanted to get.

My IDE is Ulipad, is this a bug with the IDE?

Second Update:

This code will print the characters right:

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


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

...and when I use this:

#!/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)

...or...

#!/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)

...it doesn't work. How would I print the variable a appropriately?

thanks

Answer

Alex Martelli picture Alex Martelli · Apr 22, 2010

You first need to declare an encoding, as the error messages says so clearly -- it even tells you to look here for details! Your encoding is presumably gb2312.

BTW, it would be simpler (with the same encoding declaration) to do

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

and you may not even need the encode part, if your sys.stdout has an encoding attribute properly set (depends on your terminal, OS, etc).