9

我需要修改我的程序以接受 Unicode,它可能来自任何 UTF-8 以及各种 UTF-16 和 UTF-32 编码。我对 Unicode 了解不多(尽管我读过 Joel Spolsky 的文章维基百科页面)。

现在我正在使用 anstd::istream并读取我的输入charchar然后将(必要时)存储在std::string. 我想

  • 修改它(不费吹灰之力)以支持上述编码,并且
  • 弄清楚如何测试上述编码(我有点像白面包美国人,甚至不知道如何用另一种编码制作示例文本文件),理想情况下
  • 以跨平台的方式执行此操作。

另外,如果可能的话,我想尽可能地节省空间(所以如果我们不需要超过一个字节/字符,我们就不会使用它)。据我了解,这意味着以 UTF-8 存储,这很好,但我不知道执行此操作的标准字符串(据我了解,wchar_t具有实现定义的大小和编码)。

4

2 回答 2

2

只要您主要使用标准 ASCII 字符,UTF-8 就可以节省空间。

std::string 对 UTF-8 没有问题,因为其中没有 0 字节。您可以告诉 std::string 输入字符的长度,如果它们有 NULL 字节,就像在 UTF-32 中一样。std::string 无法告诉您 UTF-8 字符串有多少个字符,您必须使用外部函数。

此外,还有一个使用 wchar_t 的 std::string 的广泛版本,而不是 char,我只是忘记了名字。

编码之间的转换也有一些方面的提升。

您可以使用带有 boost 的标准库。或者,您可以使用 C 库中的字符串处理函数。还有Qt、Tcl等编程框架提供的功能。

参见例如:

utf8 编解码器方面

于 2008-12-24T07:51:17.933 回答