以前都是很好用的. 但今天遇到了这种情况, 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失效了, 后面字母全小写了. 不知道到底是什么原因呀, 有大侠帮助下呗, 谢谢谢谢谢谢了.
我要得到这个网页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
是 MakeUpper
不是 skip
#5
我想是不是那几个汉字的编码有些"问题", 所以MakeUpper到那里时, 中断了. 但具体的情况是怎么回事呀. 应该要具体如何改才能MakeUpper所以的字母啊.
MakeUpper应该是自动忽略掉汉字, 数字, 只针对字母的吧.
MakeUpper应该是自动忽略掉汉字, 数字, 只针对字母的吧.
#6
MakeUpper可能无法处理汉字,你应该加个异常处理看看抛出来什么错误
#7
估计是“期指不应受风波影响”中的“指”字被截断成两半了。用Unicode处理就不会发生这种问题。
#8
噢, 原来是这样的啊, 谢谢啊.
那为什么"指"字会被分成二节, 之后是不是MakeUpper就中止执行了啊.
大侠们以前是否遇到过这样的问题呀, 是如何解决的啊. 谢谢了
我再给帖子加点分
那为什么"指"字会被分成二节, 之后是不是MakeUpper就中止执行了啊.
大侠们以前是否遇到过这样的问题呀, 是如何解决的啊. 谢谢了
我再给帖子加点分
#9
用unicode可能可以试试
#10
看你的网页为 GBK编码,通常应该没有问题,但是webserver和browser有一个默契,即使是gbk(ANSI)编码,源文件依然可能含有c语言认为字符串结束的符号'\0'(NULL)
对于下载的网页源码(ANSI或者UTF-8),安全的办法是根据下载的长度,做一次扫描处理,不把希望出现的字节编码(特别是'\0')清除或者用空格替换掉,然后再做后续处理
对于下载的网页源码(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失效了, 后面字母全小写了. 不知道到底是什么原因呀, 有大侠帮助下呗, 谢谢谢谢谢谢了.
我要得到这个网页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
是 MakeUpper
不是 skip
#5
我想是不是那几个汉字的编码有些"问题", 所以MakeUpper到那里时, 中断了. 但具体的情况是怎么回事呀. 应该要具体如何改才能MakeUpper所以的字母啊.
MakeUpper应该是自动忽略掉汉字, 数字, 只针对字母的吧.
MakeUpper应该是自动忽略掉汉字, 数字, 只针对字母的吧.
#6
MakeUpper可能无法处理汉字,你应该加个异常处理看看抛出来什么错误
#7
估计是“期指不应受风波影响”中的“指”字被截断成两半了。用Unicode处理就不会发生这种问题。
#8
噢, 原来是这样的啊, 谢谢啊.
那为什么"指"字会被分成二节, 之后是不是MakeUpper就中止执行了啊.
大侠们以前是否遇到过这样的问题呀, 是如何解决的啊. 谢谢了
我再给帖子加点分
那为什么"指"字会被分成二节, 之后是不是MakeUpper就中止执行了啊.
大侠们以前是否遇到过这样的问题呀, 是如何解决的啊. 谢谢了
我再给帖子加点分
#9
用unicode可能可以试试
#10
看你的网页为 GBK编码,通常应该没有问题,但是webserver和browser有一个默契,即使是gbk(ANSI)编码,源文件依然可能含有c语言认为字符串结束的符号'\0'(NULL)
对于下载的网页源码(ANSI或者UTF-8),安全的办法是根据下载的长度,做一次扫描处理,不把希望出现的字节编码(特别是'\0')清除或者用空格替换掉,然后再做后续处理
对于下载的网页源码(ANSI或者UTF-8),安全的办法是根据下载的长度,做一次扫描处理,不把希望出现的字节编码(特别是'\0')清除或者用空格替换掉,然后再做后续处理
#11
不能排除 网页本身的问题,很多时候IE 显示网页的时候 会出现乱码,
就是因为数据会缺胳膊少腿造成的,删掉部分字节就正常了.
建议先不转换成大写,保存下来,看看内容中有没有特别的字符
就是因为数据会缺胳膊少腿造成的,删掉部分字节就正常了.
建议先不转换成大写,保存下来,看看内容中有没有特别的字符