C++ 如何使用STL字符串和流读取/存储unicode
我需要修改我的程序以接受Unicode,它可能来自任何UTF-8以及各种UTF-16和UTF-32编码。我对Unicode知之甚少(尽管我读过Joel Spolsky的书和其他书) 现在我正在使用C++ 如何使用STL字符串和流读取/存储unicode,c++,string,unicode,stl,stream,C++,String,Unicode,Stl,Stream,我需要修改我的程序以接受Unicode,它可能来自任何UTF-8以及各种UTF-16和UTF-32编码。我对Unicode知之甚少(尽管我读过Joel Spolsky的书和其他书) 现在我正在使用std::istream并通过char读取我的输入char,然后(必要时)存储在std::string中。我想 修改此代码(尽可能省力)以支持上述编码,以及 找出如何测试上述编码(我有点像美国白人,甚至不知道如何用另一种编码制作示例文本文件),理想情况下 以跨平台的方式进行此操作 此外,如果可能的话
std::istream
并通过char
读取我的输入char
,然后(必要时)存储在std::string
中。我想
- 修改此代码(尽可能省力)以支持上述编码,以及
- 找出如何测试上述编码(我有点像美国白人,甚至不知道如何用另一种编码制作示例文本文件),理想情况下
- 以跨平台的方式进行此操作
此外,如果可能的话,我希望尽可能节省空间(因此,如果我们不需要超过一个字节/字符,我们就不使用它)。据我所知,这意味着存储在UTF-8中,这很好,但我不知道有哪种标准字符串可以做到这一点(据我所知,
wchar\u t
具有实现定义的大小和编码)。UTF-8节省空间,只要主要使用标准ASCII字符即可
字符串与UTF-8没有问题,因为其中没有0字节。您可以告诉std::string输入字符的长度,如果它们有空字节,如在UTF-32中。string无法告诉您UTF-8字符串有多少个字符,您必须使用外部函数
另外,还有一个使用wchar\u t的std::string的广泛版本,与char相反,我只是忘记了名称
boost中还有用于在编码之间转换的方面
您可以将标准库与boost一起使用。也可以使用C库中的字符串处理函数。还有编程框架(如Qt和Tcl)提供的函数
例如,见:
看看这个问题
正如Pukku所说:你可能会因为头痛而头痛
std::string的广泛版本是std::wstringThank!它没有出现后,快速的网络搜索,我没有访问我的标准图书馆参考。