C++ 如何用unicode字符替换特定ascii字符的所有匹配项(在std::string中)
如何用unicode字符替换std::string中出现的每个特定ascii字符 我正在尝试(以em dash为例) 我当然可以写一个循环,但我希望有一个单一的标准函数可用于此。我知道修改后的字符串将比原始字符串长C++ 如何用unicode字符替换特定ascii字符的所有匹配项(在std::string中),c++,string,replace,unicode,C++,String,Replace,Unicode,如何用unicode字符替换std::string中出现的每个特定ascii字符 我正在尝试(以em dash为例) 我当然可以写一个循环,但我希望有一个单一的标准函数可用于此。我知道修改后的字符串将比原始字符串长 这似乎是一个愚蠢的基本问题,但一个小时的谷歌搜索解决了这个问题。boost,哦,是的,成功了 #include <boost/algorithm/string/replace.hpp> ... boost::replace_all(mystring, " &qu
这似乎是一个愚蠢的基本问题,但一个小时的谷歌搜索解决了这个问题。boost,哦,是的,成功了
#include <boost/algorithm/string/replace.hpp>
...
boost::replace_all(mystring, " ", "—");
std::string
只知道任意char
元素,而不知道那些char
s实际上代表什么。您有责任决定将std::string
的内容编码为什么字符集,然后在同一字符集中编码Unicode字符。例如,在UTF-8中,-
(U+2014 EM破折号)是3char
s:0xE2 0x80 0x94
,但在Windows-125x字符集中它只有1char
:0x97
您可以使用std::string::find()
方法查找1-char
ASCII字符的索引,然后使用std::string::replace()
方法替换char
编码的Unicode字符,例如:
string mystring=。。。;
字符串替换=…;//“\xE2\x80\x94”、“\x97”等。。。
字符串::size\u type pos=0;
while((pos=mystring.find(“”,pos))!=string::npos){
mystring.replace(位置1,replacement);
pos+=替换。大小();
}
从本质上讲,C++不提供任何处理Unicode字符串的工具。它以字节为单位处理字符串,这只适用于ascii。你需要一些Unicode库。std::string
确实不支持Unicode。基本类型是char
,并且string
希望每个元素都是它自己的独特标志符号,而不像unicode,在unicode中,多个元素可以组合成一个标志符号“具有unicode字符”-unicode字符的长度是多少?您应该知道,C++
有unicode字符串literLa,您很可能熟悉,codevt
。你有什么问题吗?@BoBTFish谢谢。我将调查boost是否有。相关:
#include <boost/algorithm/string/replace.hpp>
...
boost::replace_all(mystring, " ", "—");
string tmp;
std::regex_replace(back_inserter(tmp), mystring.begin(), mystring.end(), std::regex(" "), "—");
mystring = tmp;