页面中的utf-8编码如何转换为中文

newstarao 2010-07-01 04:45:27
我用GetHttpConnection下载下来的页面里的中文用utf-8编码处理了比如“跳”转换为了“跳”。
这个页面可以自动做转换
http://tool.chinaz.com/Tools/UTF-8.aspx

我想知道如何用vc实现转换,mfc里是否有对应的函数
注意我得到的跳是字符串。。。
最好是能提供源码 不用太详细只要关键部分就可以,当然如果能提示下思路也行,问题解决后结贴,先谢谢了
...全文
324 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
stonewater 2010-07-03
来晚了,顶下
  • 打赏
  • 举报
回复
newstarao 2010-07-03
谁能告诉我为什么不能结贴。。。给完分,点击完直接退出登录变成游客。。。郁闷试了那次了。。我用的ie7
  • 打赏
  • 举报
回复
newstarao 2010-07-02
CString ok="8df3";
int b=_tcstoul(ok,NULL,16);
wchar_t aa = b;
CString temp(aa);

问题解决了,我的方法是,得到utf-8编码的字符串后会存到cstring中,类似ok,然后用_tcstoul函数转换字符串的进制,然后整形数值转换为字符赋给Cstringtemp,输出。。。呵呵,各位见笑了。我是本着我的实际需要出发的,可能有地方不规范。总之输出的内容正确了。大家的答案在一定程度上误导了我。。。欢迎大家批评指正。
ps:我的是多字符字符集,vs2005
  • 打赏
  • 举报
回复
hzy694358 2010-07-01
[Quote=引用 3 楼 jennyvenus 的回复:]

使用WideCharToMultiByte和MultiByteToWideChar组合,先转换成utf16,再转成gb。
[/Quote]
基本原理就这样,
网上有很多例子
  • 打赏
  • 举报
回复
cclk-1024 2010-07-01
"跳"这样的字符串我感觉要先拆开,
分成
char a[3] = {0x8d,0xf3,0x00};
MessageBox(NULL,a,NULL,NULL);
然后可能需要unicode和asc的转换,楼上已经说了
  • 打赏
  • 举报
回复
iamshuke 2010-07-01
十六进制字符串转数值的问题,可以参考这个: http://blog.csdn.net/zhaoyawei/archive/2006/04/29/696694.aspx
  • 打赏
  • 举报
回复
iamshuke 2010-07-01
需要先解析"跳"这样的字符串,把其中的十六进制数字转成一个一个的WORD(WCHAR),放入数组中,再用楼上几位的方法去转。
  • 打赏
  • 举报
回复
使用WideCharToMultiByte和MultiByteToWideChar组合,先转换成utf16,再转成gb。
  • 打赏
  • 举报
回复
踏实每一步 2010-07-01
int UTF8ToGB(const char* str,char *out)
{
WCHAR *strSrc;
TCHAR *szRes;
int len;

//获得临时变量的大小
int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
strSrc = new WCHAR[i+1];
MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);

//获得临时变量的大小
i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
szRes = new TCHAR[i+1];
WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);

len = (i+1)*sizeof(CHAR);
memcpy(out,szRes,len);
out[len+1] ='\0';

delete []strSrc;
delete []szRes;

return len;
}


C/C++ code
//GB2312字符串转为UTF-8编码
LPCTSTR GB2312ToUTF8(LPTSTR pUTF8Out,LPCTSTR pGB2312Input, int GB2312Len)
{
CHAR buf[4];
LPCTSTR lpReturn,pGB2312Cursor,pGB2312InputEnd;
WCHAR wcBuffer;

lpReturn = (LPCTSTR)pUTF8Out;
pGB2312Cursor = (LPTSTR)pGB2312Input;
pGB2312InputEnd= pGB2312Cursor + GB2312Len;

while( pGB2312Cursor<pGB2312InputEnd ){
//如果ANSII直接复制就可以
if( *pGB2312Cursor>0 ){
*pUTF8Out++ = *pGB2312Cursor++;
}else{
::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,pGB2312Cursor,2,&wcBuffer,1);
memcpy( pUTF8Out, UnicodeToUTF8Char(buf,wcBuffer), 3 );
pGB2312Cursor += 2;
pUTF8Out += 3;
}
}
*pUTF8Out = '\0';
return lpReturn;
}
  • 打赏
  • 举报
回复
muzizongheng 2010-07-01
具体看你的工程设置, 如果你的工程师Unicode, 你得到string时就应该把这个字符串转成UTF-16; 用MultiCharToWideChar。

如果你的工程是多字节的, 就把它转成CP_ACP。
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2010-07-01 04:45
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……