用python处理html entity时,python编码时出现一些问题,见下面的代码

import re
message
= 密码修改成功
regex
= (&#(\\d{5});)
entities
= re.findall(regex, message)
for entity in entities:
     message
= message.replace(entity[0], unichr(int(entity[1])))
#print message #在pythonwin中执行没有问题,在pydev中执行报错
print message.encode(gbk) #正常

为了搞清除为什么会出错,下面是我做的一些测试.
下面是对’密码’两个字的一些测试,在pythonwin交互窗口中执行,虽然知道了要得到正确的中文该怎么在程序中处理,并且使得程序在pydev和pythonwin
两个环境中执行都不出错,但是却还是搞不清为什么会这个样子.先记下罢.有能解释底层机制的朋友,也请留言帮个忙吧.

>>> s = 密码
>>> s
\xc3\xdc\xc2\xeb
>>> su = u密码
>>> su
u
\xc3\xdc\xc2\xeb
#u前缀表示是unicode编码,但是里面实际存储的是密码两个字的gbk编码
>>> print s
密码
>>> print su #在pydev和SciTE中报错,不能打印
?ü??
>>> char1 = unichr(23494)
>>> char2 = unichr(30721)
>>> char1
u
\u5bc6
>>> char2
u
\u7801
>>> print char1

>>> print char2

>>> char = char1 + char2
>>> char
u
\u5bc6\u7801
>>> print char #在pydev和SciTE中会报错为什么
密码
>>> s.decode(gbk) #变成了unicode编码16进制
u\u5bc6\u7801
>>> print s.decode(gbk) #在pydev和SciTE中不能正常打印输出
密码
>>> char.encode(gbk)
\xc3\xdc\xc2\xeb
>>> s
\xc3\xdc\xc2\xeb
>>> su
u
\xc3\xdc\xc2\xeb
>>> char
u
\u5bc6\u7801
>>> char.encode(gbk)
\xc3\xdc\xc2\xeb
>>> print s
密码
>>> print char.encode(gbk)
密码

Update 1:
sys.setdefaultencoding()可以设置默认编码供转换时使用,但是Python启动之后这个方法会被site.py删除,因此必须reload(sys)然后调用sys.setdefaultencoding
下面是我的测试方法,根据这里的结果,估计是pythonwin内启动的交互环境对参数应该有了设置,不过sys.getdefaultencoding()的返回还是默认的ascii:
‘修改密码成功的html entity是’ "密码修改成功",在下面的python代码中在这个网页上显示不对.把&要换成&符号

#python 2.4 windows, execute in SciTe or Eclipse pydev
#
Note: if you execute this script in pythonwin, the result may be different!
import sys
import re
reload(sys)
#should do this to setdefault encoding of sys,
#
this method is deleted in site.py [/PYTHON_HOME/Lib] by default

#try to set default encoding other than default encoding
#
default ascii # Error: out 1, out 3, out 6
#
sys.setdefaultencoding(‘gbk’)   #all right, but a warning raised
#
sys.setdefaultencoding(‘utf-8’)   #out 1, out 3, out 6: unreadable in outputwindow, may be right if change the console encoding
message = ‘密码修改成功
regex
= (&#(\\d{5});)
entities
= re.findall(regex, message)
for entity in entities: