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

标签 c++ string unicode unicode-string

我需要使用 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/

相关文章:

c# - 当字符串以方向不可知字符(例如括号)结尾时解析 rtl 语言的问题

c++ - 如何将分隔的 txt 文件传递​​给采用常量 char * 的函数?

c++ - 将字符串的子部分转换为 int C++

javascript - 值 &# 到 unicode 转换

java - 从字符串中获取字母的第一个实例

javascript - 使用 JavaScript 在对象内部查找特定字符串

python - 在python中的拉丁文之前对西里尔文字符串进行排序

c++ - 读取未正确存储在数组中的字节

c++ - FFTW:IFFT后信号由噪声组成

c++ - 为什么这个程序被三个 C++ 编译器错误地拒绝了?