我需要使用 fstream
读取文件在具有 ASCII
的 C++ 中以及Unicode
使用 getline
的字符功能。
但该函数仅使用 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");
}
关于c++ - std::string 转换为 char32_t(unicode 字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504517/