我需要修改我的程序以接受Unicode,这可能来自任何UTF-8和各种UTF-16和UTF-32编码。我对Unicode知之甚少(尽管我读过Joel Spolsky的article和Wikipedia page)。
现在我正在使用std::istream
并通过char
阅读我的输入char
,然后在std::string
中存储(必要时)。我想
另外,如果可能的话,我想尽可能节省空间(所以如果我们不需要超过一个字节/字符,我们就不会使用它)。根据我的理解,这意味着存储在UTF-8中,这很好,但我不知道这样做的标准字符串(根据我的理解,wchar_t
具有实现定义的大小和编码)。
答案 0 :(得分: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。
参见例如:
答案 1 :(得分:2)