我设法忽略了所有这些多字节字符的东西,但现在我需要做一些UI工作,我知道我在这方面的无知将赶上我!任何人都可以在几段或更少的段落中解释我需要知道什么,以便我可以本地化我的应用程序?我应该使用什么类型(我同时使用.Net和C/C++,我需要Unix和Windows的答案).
查看Joel Spolsky的绝对最低每个软件开发人员,绝对必须知道Unicode和字符集(没有借口!)
编辑20140523:另外,在YouTube上观看汤姆斯科特的角色,符号和Unicode奇迹 - 它只有不到十分钟的时间,并且是对UTF-8的精彩'黑客'的精彩解释
字符编码由一系列代码组成,每个代码都从给定的字符集中查找符号.请在Wikipedia上查看关于字符编码的这篇好文章.
UTF8(UCS)为每个符号使用1到4个字节. 维基百科给出了多字节纲要如何工作的一个很好的概述:
单字节字符的最高位始终为0.
多字节序列的第一个字节的最高有效位确定序列的长度.对于双字节序列,这些最高有效位为110; 1110用于三字节序列,依此类推.
多字节序列中的剩余字节有10个作为它们的两个最高有效位.
UTF-8流既不包含字节FE也不包含FF.这可以确保UTF-8流看起来永远不会像以U + FEFF(字节顺序标记)开头的UTF-16流
该页面还显示了每种字符编码类型的优缺点之间的比较.
UTF16(UCS2)
每个符号使用2个字节到4个字节.
UTF32(UCS4)
每个符号始终使用4个字节.
char只表示一个字节的数据,而不是实际的编码.它与UTF8/UTF16/ascii不相似.char*指针可以指任何类型的数据和任何编码.
STL:
stl的std :: wstring和std :: string都不是为UTF-8和UTF-16等可变长度字符编码而设计的.
如何实施:
看看iconv库. iconv是一个强大的字符编码转换库,由libxml等项目使用(Gnome的XML C解析器)
关于字符编码的其他重要资源:
tbray.org的字符与字节
IANA字符集
www.cs.tut.fi是关于代码问题的教程
绝对最低每个软件开发人员绝对必须知道Unicode和字符集(没有借口!)(@Dylan Beattie首先提到)
收到的智慧表明Spolsky的文章忽略了几个重点.
建议本文更完整: Unicode®标准:技术介绍
本文也是一个很好的介绍:Unicode基础知识
后者特别概述了Unicode的字符编码形式和方案.