在 C 和 C++ 中处理 unicode 字符序列的更便携和简洁的方法是什么?
此外,如何:
-读取unicode字符串
- 将 unicode 字符串转换为 ASCII 以节省一些字节(如果用户仅输入 ASCII)
-打印unicode字符串
我也应该使用环境吗?例如,我读过有关 LC_CTYPE 的内容,作为开发人员我应该关心它吗?
有哪些比较便携、干净
处理 unicode 字符的方法
C 和 C++ 中的序列?
让程序中的所有字符串都是UTF-8、UTF-16 或 UTF-32。如果由于某种原因您需要使用非 Unicode 编码,请对输入和输出进行转换。
读取unicode字符串
与读取 ASCII 文件的方式相同。但仍然有很多非 Unicode 数据,因此您需要检查数据是否is统一码。如果不是(或者如果您的首选内部编码是 UTF-32,而它是 UTF-8),则需要对其进行转换。
- 通过验证可以可靠地检测到 UTF-8 和 UTF-32。
- UTF-16 可以通过 BOM 的存在来检测。
- 如果不是 UTF 编码,则可能采用 ISO-8859-1 或 windows-1252。
将 unicode 字符串转换为 ASCII 为
节省一些字节(如果用户只
输入 ASCII)
不。如果您的数据都是 ASCII,那么 UTF-8 将占用完全相同的空间量。如果不是,转换为 ASCII 时您将丢失信息。如果您关心节省字节。
- 选择最佳的 UTF 编码。对于字符 U+0000 到 U+007F,UTF-8 是最小的。对于字符 U+0800 到 U+FFFF,UTF-16 是最小的。
- 使用 gzip 等数据压缩。有一种专门为Unicode设计的SCSU编码,但我不知道它有多好。
打印 unicode 字符串
编写 UTF-8 与编写 ASCII 没有什么不同。
除了在 Windows 命令提示符下,因为它仍然使用旧的“OEM”代码页。在那里你可以使用写入控制台W带有 UTF-16 字符串。
我也应该使用环境吗?
例如,我读过有关 LC_CTYPE 的内容,
作为开发人员我应该关心它吗
?
LC_CTYPE
是从每种语言都有自己的字符编码、因此也有自己的时代遗留下来的ctype.h
功能。今天,Unicode 字符数据库照顾这个。 Unicode 的美妙之处在于分开来自区域设置处理的字符编码处理(除了特殊的大写/小写规则立陶宛语、土耳其语和阿塞拜疆语)。
但每种语言仍然有自己的排序规则和数字格式规则,因此您仍然需要这些语言的区域设置。您需要将区域设置的字符编码设置为 UTF-8。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)