【发布时间】:2021-04-10 08:19:42
【问题描述】:
如何将 std::string 中出现的每个特定 ascii 字符替换为 unicode 字符?
我正在尝试(以 em dash 为例)
string mystring;
replace(mystring.begin(), mystring.end(), ' ', '—'); // error: 2nd char is too wide for char
replace(mystring.begin(), mystring.end(), " ", "—"); // error: replace() does not exist
我当然可以编写一个循环,但我希望有一个可用的标准函数。我知道修改后的字符串会比原始字符串长。
似乎是一个愚蠢的基本问题,但 1 小时的谷歌搜索解决了 zilch。
【问题讨论】:
-
C++ 本身不提供任何处理 Unicode 字符串的工具。它逐字节处理字符串,这仅适用于 ascii。你需要一些 Unicode 库。
-
std::string真的不支持 unicode。底层类型是char,string期望每个元素都是它自己独特的字形,不像 unicode 可以将多个元素组合成一个字形 -
"带有 unicode 字符" - 带有多长的 Unicode 字符?你应该知道
C++有unicode string literlas,你很可能熟悉en.cppreference.com/w/cpp/locale,codecvt。那你有什么问题? -
@BoBTFish 谢谢。我会调查 boost 是否有。
标签: c++ string replace unicode