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