wxpython 如何在windows下同时显示unicode中日韩文

来源:互联网 发布:剑灵里昂捏脸数据 编辑:程序博客网 时间:2024/05/22 05:32

周海汉 /文

2010.1.6

 

python版本,python 2.6+,wxpython 2.8+

 

问题提出

遇到wxpython 如何在windows下同时显示中文日文韩文越南拼音的问题。

 

windows下python如何显示utf8编码呢?

 

 

用notepad打开utf8编码的文件,韩文是框框,中文正常。
用chrome浏览器,不指定utf8编码对多字节显示有问题。指定utf8编码则能正确显示中文韩文等。
我需求的正是能同时显示的方法,不知浏览器是如何正确处理的。

 

数据文件和python源文件都是utf8。遇到中文能显示,但韩语显示为问号的问题。并不是读文件编码有问题,因为linux下并无问题。

 

问题可能原因

1.windows只支持GBK 或GB18030,对Unicode中的中日韩同时显示有问题?问题是浏览器已经解决了同时显示的问题。
2.python 在winfows下不支持unicode 0x10000以上的编码。而unihan 5.2库有大量0x20000以上的编码,是不是python本身的问题?
3.windows字库对unicode 5.2支持太有限,以致韩语要显示成?
4.我的数据文件utf8保存有问题?以致打开后没有正确解析?
除了第2点,其他都不是我碰到的问题的原因。
其实windows下显示CJK的问题,分command命令行、pythonIDLE控制台、pyqt,pygtk,wxpython,pytk等GUI。

命令行

 

cmd命令行下

 

>>> u=unichr(0xc911)

>>> print u

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

UnicodeEncodeError: 'gbk' codec can't encode character u'/uc911' in position 0:

illegal multibyte sequence

 

 

>>> print u.encode('gbk')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

UnicodeEncodeError: 'gbk' codec can't encode character u'/uc911' in position 0:

illegal multibyte sequence

>>> print u.encode('mbcs')

?

显示为问号。

 

u必须经过encode才能打印,所以对CJK支持非常有限。因为gbk不能显示韩语等。同时命令行字体也对显示各国语言有限制。

 

IDLE

 

>>> u='일'

Unsupported characters in input

 

 

wxPython GUI

 

开始发现wxPython GUI显示同时中日韩文也有问题,中文显示正确时,韩语等显示为问号。
经过研究,发现是wx.TextCtrl的SetValue方法调用的问题。
SetValue(str),str的编码最好是unicode,而不是具体的编码。
对str是utf8的字符串,应这样设置:
txtCtrl.SetValue(str.decode('utf8'))
我原来是这样写的:txtCtrl.SetValue(str.decode('utf8').encode(sys.getfilesystemencoding()))
这样就导致在mbcs编码下,只显示中文,不显示韩文和越南文。

测试程序

 

显示

 

中중중

 

于是,《汉字大全》可以发表0.7版了。

见http://code.google.com/p/hzdq