|
|
2
7
我强烈建议在应用程序内部使用utf-8,使用常规的old
示例用法:
|
|
|
3
2
我最近在一个项目中决定使用std::wstring来进行跨平台项目,因为“宽字符串是Unicode,对吗?”这导致了许多头痛:
当您使用特定于平台的代码时,使用平台的本机表示与它的API进行通信是有意义的。但是对于跨平台共享或平台间通信的任何代码,都要避免所有的歧义并使用UTF-8。 |
|
|
4
1
经验法则:使用原生平台unicode表单进行处理(utf-16或utf-32),使用utf-8进行数据交换(通信、存储)。 如果所有本地API都使用UTF-16(例如在Windows中),将字符串设置为UTF-8意味着您必须将所有输入转换为UTF-16,请调用win API,然后将答案转换为UTF-8。相当痛苦。 但是,如果主要问题是UI,那么字符串就是简单的问题。 更困难的是UI框架。 为此,我推荐wxwidgets( http://www.wxWidgets.org )支持许多平台,成熟(17年,仍然非常活跃),本地小部件,Unicode,自由许可证。 |
|
|
5
1
我会在内存中使用UTF16表示,在硬盘或电线上使用UTF-8或16表示。主要原因:utf16对于每个“字母”都有固定的大小。这简化了处理字符串(搜索、更换零件等)时的许多职责。 UTF-8的唯一原因是“西文/拉丁文”字母的内存使用量减少。您可以使用此表示法通过网络进行磁盘存储或传输。它还有一个好处,即在加载/保存到磁盘/线时,您不必担心字节顺序。 考虑到这些原因,我会在内部使用std::wstring,或者-如果您的GUI库提供了一个宽字符串,那么使用它(比如qt中的qstring)。对于磁盘存储,我将为平台API编写一个独立于平台的小型包装器。或者,如果unicode.org中有可用于此转换的平台依赖代码,我也会签出它。 澄清:朝鲜语/日语字母不是西方/拉丁语。日语是以汉字为例的。这就是我提到拉丁字符集的原因。 对于不是1个字符/2字节的UTF-16。此假设仅适用于位于基本多语言平面上的字符(请参见: http://en.wikipedia.org/wiki/UTF16 )不过,大多数UTF-16用户仍然认为所有字符都在BMP上。如果您的应用程序不能保证这一点,您可以切换到utf32或切换到utf8。 在很多API(例如Windows、Qt、Java、.NET、WxWIDGet)中,仍然使用UTF16的原因。 |
|
Ben · 统计向量中的单词在字符串中出现的频率 9 月前 |
|
Haru Hoshizora · 为什么一个整数的位置没有改变,但值却不同 11 月前 |
|
|
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 11 月前 |
|
|
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 11 月前 |
|
|
user764754 · 防止多行原始字符串文字中出现新行字符 11 月前 |
|
|
Bogaso · 从列表中返回与模式匹配的元素 11 月前 |
|
|
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 11 月前 |