字符串转换为char32_t (unicode字符)

std::string conversion to char32_t (unicode characters)

本文关键字:unicode 字符 转换 char32 字符串      更新时间:2023-10-16

我需要在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");
}