std :: string转换为char32_t(unicode字符)

时间:2014-07-01 07:18:02

标签: c++ string unicode unicode-string

我需要使用fstream使用ASCII函数在Unicode以及getline字符中使用std::string读取文件。
但该函数仅使用char32_t,并且这些简单字符串的字符无法转换为{{1}},因此我可以将它们与Unicode字符进行比较。所以任何人都可以解决任何问题。

1 个答案:

答案 0 :(得分:0)

char32_t对应于UTF-32编码,几乎从未使用过(并且通常支持不足)。您确定您的文件是以UTF-32编码的吗?

如果您确定,则需要使用std::u32string来存储字符串。对于阅读,您可以使用std::basic_stringstream<char32_t>。但请注意,这些类型通常支持不足。

Unicode通常使用以下编码:

  • 文本文件(和网页等)中的UTF-8

  • 程序中特定于平台的16位或32位编码,使用类型wchar_t

通常,普遍编码的文件是UTF-8。它们使用可变数量的字节来编码字符,从1(ASCII字符)到4.这意味着你不能使用std :: string

直接测试各个字符。

为此,您需要将UTF-8字符串转换为wchar_t字符串,存储在std::wstring中。

为此,请使用如下定义的转换器:

std::wstring_convert<std::codecvt_utf8<wchar_t> > converter;

转换成那样:

std::wstring unicodeString = converter.from_bytes(utf8String);

然后,您可以访问各个unicode字符。不要忘记在每个字符串文字之前加上“L”,以使其成为unicode字符串文字。例如:

if(unicodeString[i]==L'仮')
{
    info("this is some japanese character");
}