是否有一种简单的 STL 方法可以将 std::string 转换为 std::u32string,即将 char 的 basic_string 转换为 char32_t?
这不是 Unicode 问题。
初始化一个新字符串:
std::u32string s32(s.begin(), s.end());
分配给现有字符串:
s32.assign(s.begin(), s.end());
如果字符串可能包含超出支持范围的字符char
,那么这可能会导致符号扩展问题,将负值转换为大的正值。处理这种可能性比较麻烦。unsigned char
在扩大价值之前,您必须转换为。
s32.resize(s.size());
std::transform(s.begin(), s.end(), s32.begin(),
[](char c) -> unsigned char {return c;});
或一个普通的循环
s32.clear(); // if not already empty
for (unsigned char c : s) {s32 += c;}
s32.resize(s.length());
std::copy(s.begin(),s.end(),s32.begin());