问问各位大人遇到过CString::MakeUpper失效的情况没?

时间:2023-01-10 20:53:37
我写了个程序, 得到HTML页面源代码. 用MAKEUPPER把源代码转化为大写, 好进行查找.
以前都是很好用的. 但今天遇到了这种情况, MAKEUPPER不管用了. 得到HTML源代码后, 用MAKEUPPER后, 源代码前面一部分转化为大写了, 但遇到了好像一段汉字, MAKEUPPER把这段汉字   "[期指] 期指不应受风波影响"-------->变成这样了"[期指] 期? 覆挥κ芊绮ㄓ跋?/a>"  之后的所有字母就都是小写的了. 不知道是什么原因, 有没有大侠能解释下啊, 谢谢

11 个解决方案

#1


将源字符中转换到UNICODE再赋值给CStringW再进行MAKEUPPER。

#2


哎呀, 好着急呀. 
我要得到这个网页http://news.eastmoney.com/channel/1111.html
我得到HTML源代码是这样的.
bool CTitleList::GetWebSrc(CString url)
{
TRACE("\r\n=================================================\r\n");
TRACE("CTitleList===GetWebSrc()\r\n");

CInternetSession is;

CHttpFile * hf = (CHttpFile*)is.OpenURL(url);
if (hf == NULL)
{
TRACE("连接到见面出错\r\n");
return false;
}

CString temp;
while(hf->ReadString(temp))
{
m_strWebSrc += temp;
m_strWebSrc += _T("\r\n");

}

m_strWebSrc.MakeUpper();

hf->Close();
delete hf;

is.Close();

CStdioFile file;
file.Open("C:\\test.txt", CFile::modeCreate|CFile::modeWrite);
file.WriteString(m_strWebSrc);
file.Close();

TRACE("CTitleList---GetWebSrc()\r\n");
TRACE("========================================================\r\n");

return true;
}

MakeUpper到左侧一排链接的最后一个, "[期指] 期指不应受风波影响" 时, MakeUpper失效了, 后面字母全小写了. 不知道到底是什么原因呀, 有大侠帮助下呗, 谢谢谢谢谢谢了. 

#3


MakeUpper汉字以后,可能你你的循环中断了吧,后面的小写字母根本就没转

#4


判断字符是否为26个字母中的一个 
是   MakeUpper
不是 skip

#5


我想是不是那几个汉字的编码有些"问题", 所以MakeUpper到那里时, 中断了. 但具体的情况是怎么回事呀. 应该要具体如何改才能MakeUpper所以的字母啊.
MakeUpper应该是自动忽略掉汉字, 数字, 只针对字母的吧. 

#6


MakeUpper可能无法处理汉字,你应该加个异常处理看看抛出来什么错误

#7


估计是“期指不应受风波影响”中的“指”字被截断成两半了。用Unicode处理就不会发生这种问题。

#8


噢, 原来是这样的啊, 谢谢啊.
那为什么"指"字会被分成二节, 之后是不是MakeUpper就中止执行了啊.
大侠们以前是否遇到过这样的问题呀, 是如何解决的啊. 谢谢了
我再给帖子加点分

#9


用unicode可能可以试试

#10


看你的网页为 GBK编码,通常应该没有问题,但是webserver和browser有一个默契,即使是gbk(ANSI)编码,源文件依然可能含有c语言认为字符串结束的符号'\0'(NULL)
对于下载的网页源码(ANSI或者UTF-8),安全的办法是根据下载的长度,做一次扫描处理,不把希望出现的字节编码(特别是'\0')清除或者用空格替换掉,然后再做后续处理

#11


不能排除 网页本身的问题,很多时候IE 显示网页的时候 会出现乱码,

就是因为数据会缺胳膊少腿造成的,删掉部分字节就正常了.

建议先不转换成大写,保存下来,看看内容中有没有特别的字符

#1


将源字符中转换到UNICODE再赋值给CStringW再进行MAKEUPPER。

#2


哎呀, 好着急呀. 
我要得到这个网页http://news.eastmoney.com/channel/1111.html
我得到HTML源代码是这样的.
bool CTitleList::GetWebSrc(CString url)
{
TRACE("\r\n=================================================\r\n");
TRACE("CTitleList===GetWebSrc()\r\n");

CInternetSession is;

CHttpFile * hf = (CHttpFile*)is.OpenURL(url);
if (hf == NULL)
{
TRACE("连接到见面出错\r\n");
return false;
}

CString temp;
while(hf->ReadString(temp))
{
m_strWebSrc += temp;
m_strWebSrc += _T("\r\n");

}

m_strWebSrc.MakeUpper();

hf->Close();
delete hf;

is.Close();

CStdioFile file;
file.Open("C:\\test.txt", CFile::modeCreate|CFile::modeWrite);
file.WriteString(m_strWebSrc);
file.Close();

TRACE("CTitleList---GetWebSrc()\r\n");
TRACE("========================================================\r\n");

return true;
}

MakeUpper到左侧一排链接的最后一个, "[期指] 期指不应受风波影响" 时, MakeUpper失效了, 后面字母全小写了. 不知道到底是什么原因呀, 有大侠帮助下呗, 谢谢谢谢谢谢了. 

#3


MakeUpper汉字以后,可能你你的循环中断了吧,后面的小写字母根本就没转

#4


判断字符是否为26个字母中的一个 
是   MakeUpper
不是 skip

#5


我想是不是那几个汉字的编码有些"问题", 所以MakeUpper到那里时, 中断了. 但具体的情况是怎么回事呀. 应该要具体如何改才能MakeUpper所以的字母啊.
MakeUpper应该是自动忽略掉汉字, 数字, 只针对字母的吧. 

#6


MakeUpper可能无法处理汉字,你应该加个异常处理看看抛出来什么错误

#7


估计是“期指不应受风波影响”中的“指”字被截断成两半了。用Unicode处理就不会发生这种问题。

#8


噢, 原来是这样的啊, 谢谢啊.
那为什么"指"字会被分成二节, 之后是不是MakeUpper就中止执行了啊.
大侠们以前是否遇到过这样的问题呀, 是如何解决的啊. 谢谢了
我再给帖子加点分

#9


用unicode可能可以试试

#10


看你的网页为 GBK编码,通常应该没有问题,但是webserver和browser有一个默契,即使是gbk(ANSI)编码,源文件依然可能含有c语言认为字符串结束的符号'\0'(NULL)
对于下载的网页源码(ANSI或者UTF-8),安全的办法是根据下载的长度,做一次扫描处理,不把希望出现的字节编码(特别是'\0')清除或者用空格替换掉,然后再做后续处理

#11


不能排除 网页本身的问题,很多时候IE 显示网页的时候 会出现乱码,

就是因为数据会缺胳膊少腿造成的,删掉部分字节就正常了.

建议先不转换成大写,保存下来,看看内容中有没有特别的字符