Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用STL字符串和流读取/存储unicode_C++_String_Unicode_Stl_Stream - Fatal编程技术网

C++ 如何使用STL字符串和流读取/存储unicode

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中。我想 修改此代码(尽可能省力)以支持上述编码,以及 找出如何测试上述编码(我有点像美国白人,甚至不知道如何用另一种编码制作示例文本文件),理想情况下 以跨平台的方式进行此操作 此外,如果可能的话

我需要修改我的程序以接受Unicode,它可能来自任何UTF-8以及各种UTF-16和UTF-32编码。我对Unicode知之甚少(尽管我读过Joel Spolsky的书和其他书)

现在我正在使用
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!它没有出现后,快速的网络搜索,我没有访问我的标准图书馆参考。