周海汉 /文

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

>>> u=u'일' Unsupported characters in input >>> u=u'일'.decode('gbk') Unsupported characters in input >>> u=u'일'.decode('utf8') Unsupported characters in input >>> u='일'.decode('gbk') Unsupported characters in input >>> u='일'.decode('utf8') Unsupported characters in input >>> u=unichr(0xc911) >>> print u >>> print u.encode('utf8') Traceback (most recent call last): File "<pyshell#41>", line 1, in <module> print u.encode('utf8') File "C:/Python26/lib/site-packages/wx-2.8-msw-unicode/wx/_core.py", line 7845, in write self.__write(text) File "C:/Python26/lib/site-packages/wx-2.8-msw-unicode/wx/_core.py", line 7850, in __write self.text.AppendText(text) File "C:/Python26/lib/site-packages/wx-2.8-msw-unicode/wx/_controls.py", line 1850, in AppendText return _controls_.TextCtrl_AppendText(*args, **kwargs) UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 2: incomplete multibyte sequence >>> print u.encode('gbk') Traceback (most recent call last): File "<pyshell#42>", line 1, in <module> print u.encode('gbk') UnicodeEncodeError: 'gbk' codec can't encode character u'/uc911' in position 0: illegal multibyte sequence >>>

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编码下,只显示中文,不显示韩文和越南文。

测试程序

>>> a = wx.App() >>> f = wx.Frame(None,-1,'test') >>> t = wx.TextCtrl(f,-1) >>> t.SetValue('일') Unsupported characters in input >>> t.SetValue('中'.decode('gbk')+unichr(0xc911)+'/xec/xa4/x91'.decode('utf8')) >>> f.Show()

显示

中중중

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

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

wxpython 如何在windows下同时显示unicode中日韩文相关推荐

  1. Unicode中日韩统一表意文字列表

    今天连续转载了好多篇文章,上网发现了很多好文,呵呵!这不又有一个网站似乎是台湾的,"闲着没事"把中日韩所有Unicode字符表给张贴出来了,看着蛮长的其实还是很实用的呀,现在转载到 ...

  2. unicode 中日韩统一表意文字 java正则表达式

    汉字正则表达式 ^[\u4e00-\u9fa5]{0,}$ 有点过时了 参考wiki:中日韩统一表意文字 : 长度大于4位的unicode 正则 需要 \x{h...h} 形式表示 public cl ...

  3. Windows下VC++显示UTF-8编码中文

    笔者在Windows下使用C++编写程序接收UTF8字符串会发生中文无法正常在console上显示的问题,故特来解决UTF8字符串如何在VC++上正常显示. 1.问题重现,UTF-8编码下的字符串&q ...

  4. 如何在 Windows 下创建 macOS 引导介质 (USB 启动盘)

    请访问原文链接:如何创建可引导的 macOS 安装介质,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 完整版请参看:如何创建可引导的 macOS 安装介质 补充章节: ...

  5. 如何在windows下安装CentOS7.7

    如何在windows下安装CentOS7.7 一.下载Oracle VM VirtualBox和CentOS7.7 1.先从官网上下载和自己Windows系统对应的版本 最新的版本是 6.0 下载地址 ...

  6. macos支持exfat吗_[启动盘制作]如何在 Windows 下制作苹果 macOS 启动盘

    to 知乎管理员: 此前本文被删, 专门写了篇文章反映问题:关于安装实录-windows下如何制作苹果安装盘文章被删的声明 现按照要求改写文章, 如果再删, 烦劳注明原因. 步入正题: 苹果的镜像格式 ...

  7. mysql数据库安装以及登录(如何在windows下安装mysql数据库,以及解决mysql8登录报错问题,绝对是保姆级别的,不要错过哦)

    目录 概述 MySQL的卸载(选看) 停止MySQL服务 软件的卸载 方式1:通过控制面板方式 方式2:通过360或电脑管家等软件卸载 方式3:通过安装包提供的卸载功能卸载 残余文件的清理 清理注册表 ...

  8. 教你如何在 Windows 下让崩溃的 Python 程序自重启

    我们用Python定时跑一些自动化程序的时候会出现程序崩溃的情况.此时如果你本人不在电脑面前,或者没有留意到程序的崩溃,没有及时重新拉起程序,会造成或大或小的损失. 本文将教你如何在 Windows ...

  9. 如何在windows下安装cygwin

    如何在windows下安装cygwin 转载于:https://www.cnblogs.com/zhujiabin/p/5747580.html

最新文章

  1. 烂泥:U盘安装Centos6.5
  2. 假如易立竞吐槽程序员......
  3. 开源神器!答应我,别再用 abc 做变量名了好么!
  4. 41. First Missing Positive 缺失的第一个正数
  5. WCF 4.0 REST服务解决Method Not Allowed错误
  6. SendMessage函数的常用消息及其应用
  7. mysql开机自启动设置
  8. 一个物理CPU如何划分成多个虚拟CPU
  9. PL/0语言编译器扩展 编译原理课程实践(1)
  10. 大数据从入门到就业的四个必备常识
  11. 『中级篇』docker之CI/CD持续集成-(终结篇)(77)
  12. Spring cloud实现服务注册及发现
  13. 微信中html5获取手机号,微信小程序通过用户授权获取手机号
  14. python金山词霸单词本批量导入
  15. systemverilog随机函数
  16. cpuid limit_Max CPUID Valut Limit 请懂电脑的解答下 谢谢!
  17. jQuery Validate表单中文正则验证+手机号正则验证
  18. vue el-table高度 height自适应
  19. 手持弹幕android制作,手持弹幕LED字幕屏
  20. 关键词下降应该怎么办?

热门文章

  1. 2013各大IT公司薪资待遇
  2. (二)关于S4HC用户登陆S系统说明
  3. moble slider
  4. 深度强化学习中带有阴影的曲线是怎么画的?
  5. android 国外网站介绍
  6. 如何被封掉三个微信号?记我的一次微信调试作死经历
  7. 车载开发之CarLife技术
  8. apt-get安装问题:请尝试不指明软件包的名字来运行“apt-get -f install”(也可以指定一个解决办法)。
  9. oracle缓冲区溢出,Oracle缓冲区溢出漏洞,聚铭网络CSV系统支持一键检测
  10. Java开发微博粉丝服务(1)——环境的搭建,开发接入与URL有效性验证