当使用Microsoft Visual c++时不能编译,需要更改为使用mb_str()(这对于包含Unicode字符的文件名无效,请考虑使用wxWidgets类和函数来处理这些文件名,因为标准c++库不支持它们)。
另一类不兼容的更改是由于修改了一些虚方法来使用wxString参数而不是const wxChar参数,从而使它们同时接受窄字符串和宽字符串。这不是一个问题,如果你只是调用这些函数,但你需要改变签名的派生类版本,如果你覆盖他们,否则他们不会被调用了。再次强调,确保这个问题不出现的最佳方法是使用警告函数签名不匹配的编译器重新构建代码(可以使用-Woverloaded-virtual g++选项)。
最后,一些结构字段,如著名的wxCmdLineEntryDesc::shortName、longName和description字段已被更改为const char
类型,而不是const wxChar*类型,因此,如果将wxT()或_T()与它们的初始化器一起使用,则需要删除它们。
Unicode是什么?
Unicode是一种字符编码标准,它解决了以前标准(如ASCII标准)的缺点,使用8位、16位或32位对每个字符进行编码。这使得有足够的代码点(参见下面的定义)一次性编码所有世界语言。更多关于Unicode的细节可以在http://www.unicode.org/找到。
从实用的角度来看,在为国际用户编写应用程序时,使用Unicode几乎是必需的。此外,任何读取它没有生成的文件或从网络中从其他服务接收数据的应用程序都应该准备好处理Unicode。
Unicode表示和术语
在使用Unicode时,定义一些术语的含义非常重要。
字形是表示字符或字符的一部分的特定图像(通常是字体的一部分)。任何字符可以有一个或多个关联的字形;例如,大写字母“A”可能包含的符号有:

Unicode为几乎所有现有的字母/脚本中的每个字符分配一个数字,这个数字称为代码点;它通常在文档手册和Unicode网站上表示为U+xxxx,其中xxxx是十六进制数。
注意,通常一个字符只分配一个代码点,但也有例外;所谓的预组合字符(参见http://en.wikipedia.org/wiki/Precomposed_character)或连接。在这些情况下,单个“字符”可能映射到多个代码点,反之亦然,多个字符可能映射到单个代码点。
Unicode标准将所有可能的代码点的空间划分为平面;一个平面的范围是65,536(1000016)个连续的Unicode编码点。平面编号从0到16,其中第一个平面是BMP,即基本多语言平面。BMP包含所有现代语言的字符和大量特殊字符。其他平面实际上主要包含历史脚本、特殊用途字符或未使用的字符。
代码点在计算机内存中表示为一个或多个代码单元的序列,其中一个代码单元是一个内存单元:8、16或32位。更准确地说,代码单元是表示用于处理或交换的编码文本单元的最小位组合。
UTF或Unicode转换格式是将Unicode代码点映射到代码单元序列的算法。其中最简单的是UTF-32,其中每个代码单元由32位(4字节)组成,每个代码点总是由单个代码单元(固定长度编码)表示。(注意,即使UTF-32也不是完全无关紧要的,因为小端和大端架构的映射是不同的)。UTF-32通常在Unix系统下用于Unicode字符串的内部表示。
另一个非常普遍的标准是UTF-16,它被Microsoft Windows使用:它使用16位编码单元(2字节)编码第一个(大约)64千个Unicode编码点(BMP平面),并使用一对16位编码单元来编码后面的字符。这些对被称为代理。因此,UTF16使用可变数量的代码单元来编码每个代码点。
最后,用于外部Unicode存储(例如文件和网络协议)的最广泛的编码是UTF-8,它是面向字节的,因此避免了UTF-16和UTF-32的endianness二义性。UTF-8使用8位(1字节)的代码单位;在通常的英文字母之外的代码点使用可变的字节数表示,这使得它在内部表示方面的效率低于UTF-32。
作为理解到目前为止所描述的各种概念之间的差异的可视化帮助,查看相同代码点的不同UTF表示:


在这种特殊情况下,UTF8需要比UTF16更多的空间(3字节而不是2字节)。
请注意,从C/ c++程序员的角度来看,由于标准类型wchar_t(通常用于表示C/ c++中的Unicode(“宽”)字符串)并不是在所有平台上都具有相同的大小,所以情况更加复杂。它在Unix系统下是4字节,与使用UTF-32的传统相对应,但在Windows下只有2字节,这是与使用UTF-16的操作系统兼容所必需的。
通常使用UTF8时,代码单元被存储到char类型中,因为几乎所有系统上的char都是8位宽的;使用UTF16时,通常将代码单元存储在wchar_t类型中,因为wchar_t在所有系统上至少是16位的。这也是wxString使用的方法。有关更多信息,请参见wxString概述。
参见http://unicode.org/glossary/获得上述术语的官方定义。
wxWidgets中的Unicode支持
默认情况下总是使用Unicode
由于wxWidgets 3.0 Unicode支持始终是启用的,虽然构建没有它的库仍然是可能的,但不建议再使用它,并且在不久的将来将不再支持它。这意味着只在内部使用Unicode字符串,在Microsoft Windows下使用Unicode系统API,这意味着wxWidgets程序需要Microsoft层才能在Windows 95/98/ME上运行Unicode。
但是,与以前版本的wxWidgets的Unicode构建模式不同,这种支持基本上是透明的:即使也支持宽字符串(即utf16编码的wchar_t或utf8编码的char),您仍然可以继续使用窄字符串(即当前本地语言环境编码的char*)。任何wxWidgets函数都接受这两种类型的参数,因为这两种类型的字符串都被隐式地转换为wxString

wxWidgets随笔(6)-utf8中文(2)相关推荐

  1. wxWidgets随笔(7)-utf8中文(3)

    wxMessageBox("Hello, world!"); wxMessageBox(L"Salut \u00E0 toi!"); // U+00E0 is ...

  2. wxWidgets随笔(5)-utf8中文(1)

    在wxWidgets 3.0中对Unicode的支持已经发生了根本的变化,很多与以前版本的库相关的现有资料已经不再正确. 臭名昭著的宏wxT()和_T()不再需要了.基本上,您可以从任何使用它们的代码 ...

  3. wxWidgets随笔(9)-utf8~wxString存储二进制数据(4)

    使用wxString存储二进制数据 可以使用函数wxString::To8BitData和wxString::From8BitData来存储二进制数据(即使它包含空值). 注意,即使允许使用NUL字符 ...

  4. mysql substr 中文字符_解析使用substr截取UTF-8中文字符串出现乱码的问题

    我们知道有时候使用substr来截取UTF-8中文字符串的时候,经常会出现乱码,为什么会出现这样的问题呢,本文告诉你答案. 看这样一段代码吧(字符编码为UTF-8): $str = '都知道strle ...

  5. php 邮件乱码,解决PHP mail发送UTF-8中文邮件乱码

    在这里,我将解决一个问题,也许很多人遇到过,困惑又不知道如何去做的问题. 如何发送中文邮件时没有乱码? 在这里我将告诉你如何发送UTF-8编码格式的中文电子邮件.本文不涉及GBK编码或者GB2312编 ...

  6. 解决 Docker Image的UTF-8中文字符集的问题(以Oracle为例)

    解决 Docker Image的UTF-8中文字符集的问题(以Oracle为例) 参考文章: (1)解决 Docker Image的UTF-8中文字符集的问题(以Oracle为例) (2)https: ...

  7. Android Studio项目编码设置为GBK或UTF-8  中文乱码 和 Eclipse项目编码设置

    Android Studio项目编码设置为GBK或UTF-8  中文乱码 1.打开File->Setting->Editor->File Encoding 进行编码设置 (只能影响你 ...

  8. linux unicode utf8.h,linux shell下16进制 “\uxxxx” unicode to UTF-8中文

    问题出现背景: 项目中有个通过ip获取归属地城市需求,我是直接通过新浪的ip归属查询接口来获取的.我使用的是shell脚本调用 RESULT=$(curl -s 'http://int.dpool.s ...

  9. MYSQL使用UTF8中文乱码终极解决办法

    转自:http://wenku.baidu.com/view/d2d4f15ba8114431b80dd81f.html MYSQL使用UTF8中文乱码终极解决办法   作者:刘明灵 liumingl ...

最新文章

  1. IOS Key-Value Observing (KVO)
  2. 数论--中国剩余定理模板
  3. python与机器学习(七)上——PyTorch搭建LeNet模型进行MNIST分类
  4. python创建树_python – 从SQLalchemy中的自引用表创建树
  5. 【QT】QT从零入门教程(十七):QT+OpenCV+VS 打包exe
  6. 【mybatis】学习笔记之conf.xml与mapper.xml配置
  7. JDK8 有关集合部分常用的语法
  8. 自动点击王-全能自动点击王软件
  9. 投标是个技术活,不这样做要么苟且,要么狗带
  10. 三星android mac地址修改,三星手机如何改mac地址啊
  11. c语言中指针几个字节,【C++】一个指针占几个字节?为什么呢?
  12. 软银没有中国,孙正义失去一切
  13. iOS 13越狱:越狱后如何安装AppSync和afc2越狱补丁
  14. 计量经济学计算机输出结果,计量经济学作业结果解析A.doc
  15. java is as,as-is是什么意思
  16. 各种说明方法的例句_十种说明方法造句
  17. 最近流行的病毒(杀毒软件无法查杀)
  18. java-net-php-python-java智能会议管理系统计算机毕业设计程序
  19. 2023计算机毕业设计题目选题经验
  20. 从京东IPO看电商的下一个十年

热门文章

  1. 「Java Web」主页静态化的实现
  2. 原生JS实现简单的淘宝放大镜效果
  3. The Longest Increasing Subsequence (LIS)
  4. Struts2 常量配置
  5. SQL Server 2005查询处理结构-用户模式计划(UMS)
  6. Turtle库的学习积累
  7. 洛谷 [SDOI2015]约数个数和 解题报告
  8. JavaScript对象和数组
  9. tomcat 禁用access.log
  10. 转-iOS开发系列--地图与定位