aks*_*ksh 11 c c++ unicode ascii character-encoding
在C和C++中处理unicode字符序列的更便携和干净的方法是什么?
而且,如何:
- 读取unicode字符串
- 将unicode字符串转换为ASCII以保存一些字节(如果用户只输入ASCII)
- 打印unicode字符串
我也应该使用这个环境吗?我已经读过关于LC_CTYPE的例子,我应该关心它作为开发人员吗?
在C和C++中处理unicode字符序列的更便携和干净的方法是什么?
程序中的所有字符串都是UTF-8,UTF-16或UTF-32.如果由于某种原因需要使用非Unicode编码,请对输入和输出进行转换.
读取unicode字符串
您读取ASCII文件的方式相同.但是仍然有很多非Unicode数据,所以你要检查数据是否是 Unicode.如果不是(或当你首选的内部编码是UTF-32时它是UTF-8),你需要转换它.
将unicode字符串转换为ASCII以保存一些字节(如果用户只输入ASCII)
别.如果您的数据都是ASCII,那么UTF-8将占用完全相同的空间.如果不是,转换为ASCII时将丢失信息.如果你关心保存字节.
打印unicode字符串
编写UTF-8与编写ASCII没有什么不同.
除了在Windows命令提示符下,因为它仍然使用旧的"OEM"代码页.在那里你可以使用带有UTF-16字符串的WriteConsoleW.
我也应该使用这个环境吗?我已经读过关于LC_CTYPE的例子,我应该关心它作为开发人员吗?
LC_CTYPE从每种语言都有自己的字符编码,以及它自己的ctype.h功能的日子来看,这是一种延续.今天,Unicode字符数据库负责这一点.Unicode的优点在于它将字符编码处理与区域设置处理分开(除了立陶宛语,土耳其语和阿塞拜疆语的特殊大写/小写规则).
但是每种语言仍然有自己的排序规则和数字格式规则,因此您仍然需要这些语言环境.并且您需要将您的语言环境的字符编码设置为UTF-8.
您需要读取、打印 Unicode 或将其转换为 ASCII(如果合适)?只需使用 UTF-8,所有这一切对您来说都是绝对透明的。
对于文本分析/处理,请使用 ICU、Boost.Locale 甚至 Qt、Glib 等优秀的库,它们提供了非常好的文本分析/处理工具。