UTF8 对比UTF16 对比字符* 对比什么?有人给我解释一下这个烂摊子吗!
-
05-07-2019 - |
题
我已经设法忽略所有这些多字节字符的东西,但现在我需要做一些 UI 工作,我知道我在这方面的无知将会赶上我!谁能用几段或更少的内容解释我需要知道的内容,以便我可以本地化我的应用程序?我应该使用什么类型(我同时使用 .Net 和 C/C++,并且我需要针对 Unix 和 Windows 的答案)。
解决方案
查看Joel Spolsky的 绝对最低的每个软件开发人员,绝对必须知道Unicode和字符集(没有借口!)
EDIT 20140523 :另外,请观看 字符,符号和汤姆斯科特在YouTube上的“Unicode奇迹” - 它只有不到十分钟的时间,并且对UTF-8的精彩“黑客”进行了精彩的解释
其他提示
字符编码由一系列代码组成,每个代码都从给定的字符集中查找符号。请参阅这篇好文章 维基百科关于字符编码.
UTF8 (UCS) 每个符号使用 1 到 4 个字节。 维基百科 给出了多字节概要如何工作的一个很好的概要:
- 单字节字符的最高有效位始终为 0。
- 多字节序列的第一个字节的最显着位决定了序列的长度。这些最重要的位是两个字节序列的110;1110用于三字节序列,依此类推。
- 多字节序列中的其余字节具有10个最重要的位置。
- UTF-8 流既不包含字节 FE 也不包含 FF。这确保UTF-8流从U+FEFF开始(字节订单标记)从未像UTF-16流一样
该页面还向您展示了每种字符编码类型的优缺点之间的详细比较。
每个符号使用 2 到 4 个字节。
每个符号始终使用 4 个字节。
字符 只是表示一个字节的数据,而不是实际的编码。它与 UTF8/UTF16/ascii 不同。char* 指针可以引用任何类型的数据和任何编码。
标准格式:
STL的STD :: WSTRING和STD :: String均未针对诸如UTF-8和UTF-16之类的可变长度编码设计。
如何实施:
看一下 iconv 库。 图标 是一个强大的字符编码转换库,被诸如 库文件 (Gnome 的 XML C 解析器)
有关字符编码的其他重要资源:
- tbray.org 的角色对比字节
- IANA 字符集
- www.cs.tut.fi 的关于代码问题的教程
- 每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低限度(没有任何借口!) (首先由@Dylan Beattie 提到)
收到的智慧表明Spolsky的文章未命中几点重要。
建议本文更完整: Unicode®标准:技术介绍
本文也是一个很好的介绍: Unicode基础知识
后者特别概述了Unicode的字符编码形式和方案。
各种UTF标准是编码“代码点”的方式。代码点是Unicode字符集的索引。
另一种编码是UCS2,它总是16位,因此不支持完整的Unicode范围。
很高兴知道一个代码点不等于一个字符。例如,诸如å可以表示为代码点,也可以表示为一个用于a的一个代码点和一个用于环的代码点。
比较两个unicode字符串因此需要规范化以在比较之前获得规范表示。
字体也存在问题。处理字体有两种方法。您可以使用带有字形的巨大字体来表示您需要的所有Unicode字符(我认为最新版本的Windows带有一两个这样的字体)。或者您使用som库,它能够组合专用于Unicode标准子集的各种字体的字形。