【高分求助】使用Reg_search提取中文字符串出现乱码的问题

comefirst 2008-08-23 12:49:09
我想在一个网页中根据正则表达式提取特定的字符串,但是出现了很奇怪的问题。主要代码如下
Title="清心寡欲最新章节信息";
AnsiString regstr="([\\u4e00-\\u9fa5,\\w]*)节";
boost::regex _reg(regstr.c_str());
boost::smatch what;
string inStr=Title.c_str(); //这里将AnsiString 转化为标准的string
std::string::const_iterator _start = inStr.begin();
std::string::const_iterator _end = inStr.end();
boost::regex_search(_start, _end, what, _reg);
std::string msg1(what[1].first, what[1].second);
Memo1->Lines->Add(msg1.c_str());
以上代码中AnsiString regstr="([\\u4e00-\\u9fa5,\\w]*)节"; 如果改为AnsiString regstr="([\\u4e00-\\u9fa5,\\w]*)信",也就是提取的位置变化的时候,最后输出的结果就会莫名其妙地产生乱码,大家有么有遇到过类似的问题,已经搞了好几个小时了,还没有搞定。
谢谢参与
...全文
220 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
comefirst 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 flymoon99 的回复:]
Title="清心寡欲最新章节信息";
AnsiString regstr="([\\u4e00-\\u9fa5,\\w]*)节";
boost::wregex _reg(regstr.c_str());
boost::wsmatch what;
wstring inStr=Title.c_str(); //这里将AnsiString 转化为标准的string
std::string::const_iterator _start = inStr.begin();
std::string::const_iterator _end = inStr.end();
boost::regex_search(…
[/Quote]
我加了只有编译无法通过,提示没有此函数
comefirst 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xabcxyz 的回复:]
读写网页内容,要使用UT8/UT16编码,使用GB不行地
[/Quote]
怎么会不行?给个理由?我已经吧UTF-8转换成GB2312编码了,使用UTFDecode函数就可以了。
comefirst 2008-08-27
  • 打赏
  • 举报
回复
刚刚查了资料,说使用wregx 处理unicode必须在编译Boost的时候另外指定的。
哪位朋友知道怎么指定,告诉我一声啊,救命。
flymoon99 2008-08-24
  • 打赏
  • 举报
回复
Title="清心寡欲最新章节信息";
AnsiString regstr="([\\u4e00-\\u9fa5,\\w]*)节";
boost::wregex _reg(regstr.c_str());
boost::wsmatch what;
wstring inStr=Title.c_str(); //这里将AnsiString 转化为标准的string
std::string::const_iterator _start = inStr.begin();
std::string::const_iterator _end = inStr.end();
boost::regex_search(_start, _end, what, _reg);
std::string msg1(what[1].first, what[1].second);
Memo1->Lines->Add(msg1.c_str());
flymoon99 2008-08-24
  • 打赏
  • 举报
回复
BOOST库有unicode的版本,前面加个W就行了

Title="清心寡欲最新章节信息";
AnsiString regstr="([\\u4e00-\\u9fa5,\\w]*)节";
boost::wregex _reg(regstr.c_str());
boost::wsmatch what;
wstring inStr=Title.c_str(); //这里将AnsiString 转化为标准的string
std::string::const_iterator _start = inStr.begin();
std::string::const_iterator _end = inStr.end();
boost::regex_search(_start, _end, what, _reg);
std::string msg1(what[1].first, what[1].second);
Memo1->Lines->Add(msg1.c_str());
xabcxyz 2008-08-23
  • 打赏
  • 举报
回复
读写网页内容,要使用UT8/UT16编码,使用GB不行地
jacknes009 2008-08-23
  • 打赏
  • 举报
回复
没有看懂你的代码。。。你的是不是一个字符串在另一个字符串里查找呢?
comefirst 2008-08-23
  • 打赏
  • 举报
回复
自己支持一下

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧