C++正则匹配中文乱码

发布于 2022-09-01 13:04:32 字数 575 浏览 14 评论 0

#include <iostream>
#include <fstream>
#include <string>
#include <regex>
 using namespace  std;
 void main(){
     string str = "今天是个好日子圣达菲阿斯qweer";
     regex pattern("[\u4e00-\u9fa5]");
     sregex_token_iterator end;  //需要注意一下这里
     for (sregex_token_iterator j(str.begin(), str.end(), pattern); j != end; ++j){
         cout << *j;
     }
     system("pause");
 }

C++在匹配中文的时候,部分文字乱码,不知道大家遇到过这种情况吗

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心如荒岛 2022-09-08 13:04:32

\u4e00-\u9fa5 是匹配Unicode的汉字
C++对unicode支持不怎么好,如果你是windows下的vs编译的程序,普通字符串编译之后都是ANSI编码也就是GBK,L""字符串则是UTF16 LE,在c++11之后,可以尝试使用u8""(UTF8) u""(UTF16)U""(UTF32)来指定unicode字符串的不同UTF编码形式

看源码regex应该是C++标准库里面的,在stackoverflow上查找问题,一般反应是c++标准库里面的regex库对unicode的支持并不好,
http://stackoverflow.com/questions/11254232/do-c11-regular-expressions...
http://stackoverflow.com/questions/15882991/range-of-utf-8-characters-...
http://stackoverflow.com/questions/17103925/how-well-is-unicode-suppor...

我不知道使用UTF32或者UTF16能不能解决问题,一般推荐的办法是boost::regex + icu
这个例子看上去使用u""可以解决

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文