繁体   English   中英

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

[英]std::string conversion to char32_t (unicode characters)

我需要使用C ++中的fstream读取一个文件,该文件具有使用getline函数的ASCII以及Unicode字符。
但是该函数仅使用std::string ,这些简单字符串的字符无法转换为char32_t因此我可以将它们与Unicode字符进行比较。 因此,请任何人提供任何解决方案。

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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM