工程是多字节字符集,将一个CString转为UTF8,利用了如下方法: int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);
unsigned short * wszUtf8 = new unsigned short[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);
strGBK = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;其中大部分转换是正确的。比如strGBK="http://192.168.0.121/中文路径/test.txt";
可是少数汉字就会被转出“?”(UTF8转换中不能转换的部分似乎用“?”代替),比如strGBK="http://192.168.0.121/江苏省/test.txt";经过比对,问题出在这个“省”字。
在网上找了半天没有找到解决办法。希望各位帮忙,不想把问题留到2011~~呵呵
unsigned short * wszUtf8 = new unsigned short[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
char *szUtf8=new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);
strGBK = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;其中大部分转换是正确的。比如strGBK="http://192.168.0.121/中文路径/test.txt";
可是少数汉字就会被转出“?”(UTF8转换中不能转换的部分似乎用“?”代替),比如strGBK="http://192.168.0.121/江苏省/test.txt";经过比对,问题出在这个“省”字。
在网上找了半天没有找到解决办法。希望各位帮忙,不想把问题留到2011~~呵呵
解决方案 »
- 问个关于#include "..\XX.h" 头文件中的相对目录的问题?
- vc编程串口的问题 做出来的安装文件安装后无法正常工作
- VC++ 6.0 IDE FileView下,External Dependencies文件夹的作用?
- 求SOCK通信服务端的DLL(源代码)?
- 如何传递一字符串给子进程(打开的同时传递)
- 和delphi以及C++ builder相比,VC的socket接口的不同,救急!!!
- 请问有谁知道cue/bin、iso、ccd、bwt、mds、cdi、nrg、pdi 、b5t这个文件的文件格式,分不够可再加!
- ADO 中_RecordsetPtr的Open操作在98和2000下有什么区别?
- 请问有哪里有 Windows95 程序设计 (Charles Petzold郑全岚译)可以下载?多多给分!
- 如何得到本机(动态分配ip)的子网掩码
- 为什么UDP编程中,recefrom会收到重复包的问题
- 想用一下mfc的begin_message结果爆出这么多错误
{
int nLen = WideCharToMultiByte(CP_UTF8, 0, p_in, -1, NULL, 0, NULL, FALSE);
char *p_out = new char[nLen];
memset(p_out, 0, nLen);
WideCharToMultiByte(CP_UTF8, 0, p_in, -1, p_out, nLen, NULL, FALSE);
string s_out(p_out);
delete p_out;
p_out = NULL;
return s_out;
}
0xBD, 0xAD, 0xCB, 0xD5, 0xCA, 0xA1, // 江苏省-utf8格式
0xE6, 0xB1, 0x9F, 0xE8, 0x8B, 0x8F, 0xE7, 0x9C, 0x81, // 江苏省-utf16 little 格式
0x5F, 0x6C, 0xCF, 0x82, 0x01, 0x77,
这里特别感谢chilli,她虽然只回复了很少的内容,但在私下给了我大量的帮助,并且问题的根结也是她找到的。同时感谢各位关注这一问题的兔子党、其他党以及无党派人士。