假设我们有一个任意的字符串,s.
s具有来自世界任何地方的财产.来自美国,日本,韩国,俄罗斯,中国和希腊人民都写入小号不时.幸运的是,我们没有时间旅行者使用线性A.
为了便于讨论,让我们假设我们想要进行字符串操作,例如:
并且,仅仅因为这是为了讨论,我们假设我们想要自己编写这些例程(而不是抓住一个库),而且我们没有可以维护的遗留软件.
Unicode有3个标准:utf-8,utf-16和utf-32,每个都有利弊.但是,让我说我有点愚蠢,我想要一个Unicode来统治它们(因为为3种不同类型的字符串编码滚动动态适应库,隐藏与API用户的差异听起来很难).
-
这个问题的关键是要为自己和其他人提供有用和有用的Unicode信息:阅读RFC很好,但是有一堆与RFC不包含的编译器,语言和操作系统有关的信息,但是知道在真实的应用程序中实际使用Unicode是至关重要的.
哪种编码最通用
可能是UTF-32,尽管所有三种格式都可以存储任何字符.UTF-32具有可以在单个代码点中编码每个字符的属性.
wchar_t
无支持哪种编码.这是实施的定义.在大多数Windows平台上,它是UTF-16,在大多数Unix平台上都是UTF-32.
其编码由STL支持
无真.STL可以存储您想要的任何类型的角色.只需使用std::basic_string<t>类型足够大的模板来保存代码点.大多数操作(例如std::reverse)不知道任何类型的unicode编码.
这些编码是否全部(或根本没有)以空值终止?
否.Null是任何编码中的合法值.从技术上讲,NULL也是普通ASCII中的合法字符.NULL终止是一个C事物 - 不是编码事物.
选择如何执行此操作与您的平台有很大关系.如果您使用的是Windows,请使用UTF-16和wchar_t字符串,因为这是Windows API用于支持unicode的内容.我不完全确定UNIX平台的最佳选择是什么,但我知道大多数都使用UTF-8.
看一下开源库ICU,特别是在Docs&Papers部分.它是一个广泛的图书馆,处理各种unicode奇怪.
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |