100分求UTF8如何转成GB2312原码! 求UTF8如何转成GB2312原码!请各位高手给出原码。如把联通转成联通 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.vckbase.com/document/viewdoc/?id=1444 http://www.vckbase.com/document/viewdoc/?id=1397 void CLangConvert::ConvertUTF8toGB2312(CString str,_bstr_t& bstr){ int n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),NULL,0); WCHAR * pChar = new WCHAR[n+1]; n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pChar,n); pChar[n]=0; OLECHAR * pTempBuffer = pChar; BSTR strPassword = SysAllocString(pTempBuffer); _bstr_t aa (strPassword,FALSE); bstr=aa; SysFreeString(strPassword); delete []pChar;} http://www.vckbase.com/code/relateddoc.asp?id=2658 上面说的方法都不能把联通转成联通!还请各位高手指点!!!!!!!! 联通,这些不是UTF_8编码,utf_8编码是3字节的。 那又如何把它转成GB2312呢?int unencode(char *s,char *d){ if(!s||!d) return 0; for(;*s!=0;s++) { if(*s=='+') { *d=' '; d++; } else if(*s=='%') { int code; if(sscanf(s+1,"%02x",&code)!=1) code='?'; *d=code; s+=2; d++; } else { *d=*s; d++; } } *d=0; return 1;} 好像转不现来,麻帮忙解决下?谢谢! 将Unicode转换到ANSI(1)使用WideCharToMultiByte,例如:// 假设已经有了一个Unicode 串 wszSomeString... char szANSIString [MAX_PATH]; WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL ); (2)使用W2A宏来实现,例如:USES_CONVERSION;pTemp=W2A(wszSomeString); 注意在转换时可能存在的问题:因为ANSI转UNICODE,如果使用A2W或MultiByteToWideChar(第一个参数是CP_ACP)的话,是根据系统默认的转码表,把转入的ANSI字符串看作Multi-Bytes字符串处理的,如果是中文(中文windows默认就是中文),一个大于0x87的byte可能和下一byte一起被看作一个汉字,然后根据汉字的Unicode编码转换为相同的Unicode汉字,如果找不到相应的编码,一般就用一个默认的字符来取代它(一般是问号“?”),由此看,如果随便把一段数据给他转,转化很复杂而且极可能不可逆,而且你加密过的ANSI码是相当混乱的有很多〉0x87的byte,转换就变得不可逆了。建议自己直接就这样写:CHAR lpANSI[COUNT];WCHAR lpUnicode[COUNT];int i = 0; while(lpANSI[i] != '\0' ) { lpUnicode[i] = (WCHAR)lpANSI[i];}lpUnicode[i] = L'\0';然后按相同的方法转回来,因为对于0~0x87的ANSI字符串,对应的Unicode码就是相同的16位值,至于其他的,你的字符串反正加了密,没必要转换成显示出来是一样的字符,就按同样的方法处理了,其实如果中间的字符串不用显示或别的,直接reutrn (LPWSTR)lpANSI;过去也可以, 反正接受的时候自己清楚就可以了。 关于gloox文件传输的问题,怎么不行? 请问哪位高手用过研华的数据采集卡 关于DATAGRID的错误 请问把函数的参数设为LPCTSTR类型,和设为CString类型有区别吗? 请问:这一句if作何解释:谢谢 求教网络通讯的问题 字符串问题~~~!!! MFC的问题,请赐教! 晕急急急,,窗口的sizing问题!!!! VC的SOCKET问题请请教 VC中Unicode编码的字符怎样转换成GB2312编码? 谁能提供vc中GB2312字符串转unicode字串的函数,很急啊
{
int n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),NULL,0);
WCHAR * pChar = new WCHAR[n+1];
n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pChar,n);
pChar[n]=0;
OLECHAR * pTempBuffer = pChar;
BSTR strPassword = SysAllocString(pTempBuffer);
_bstr_t aa (strPassword,FALSE);
bstr=aa;
SysFreeString(strPassword);
delete []pChar;
}
int unencode(char *s,char *d)
{
if(!s||!d) return 0;
for(;*s!=0;s++)
{
if(*s=='+')
{
*d=' ';
d++;
}
else if(*s=='%')
{
int code;
if(sscanf(s+1,"%02x",&code)!=1) code='?';
*d=code;
s+=2;
d++;
}
else
{
*d=*s;
d++;
}
}
*d=0;
return 1;
}
好像转不现来,麻帮忙解决下?
谢谢!
(1)使用WideCharToMultiByte,例如:
// 假设已经有了一个Unicode 串 wszSomeString...
char szANSIString [MAX_PATH];
WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, wszSomeString, -1, szANSIString, sizeof(szANSIString), NULL, NULL );
(2)使用W2A宏来实现,例如:
USES_CONVERSION;
pTemp=W2A(wszSomeString); 注意在转换时可能存在的问题:
因为ANSI转UNICODE,如果使用A2W或MultiByteToWideChar(第一个参数是CP_ACP)的话,是根据系统默认的转码表,把转入的ANSI字符串看作Multi-Bytes字符串处理的,如果是中文(中文windows默认就是中文),一个大于0x87的byte可能和下一byte一起被看作一个汉字,然后根据汉字的Unicode编码转换为相同的Unicode汉字,如果找不到相应的编码,一般就用一个默认的字符来取代它(一般是问号“?”),由此看,如果随便把一段数据给他转,转化很复杂而且极可能不可逆,而且你加密过的ANSI码是相当混乱的有很多〉0x87的byte,转换就变得不可逆了。
建议自己直接就这样写:
CHAR lpANSI[COUNT];
WCHAR lpUnicode[COUNT];
int i = 0;
while(lpANSI[i] != '\0' ) {
lpUnicode[i] = (WCHAR)lpANSI[i];
}
lpUnicode[i] = L'\0';
然后按相同的方法转回来,因为对于0~0x87的ANSI字符串,对应的Unicode码就是相同的16位值,至于其他的,你的字符串反正加了密,没必要转换成显示出来是一样的字符,就按同样的方法处理了,其实如果中间的字符串不用显示或别的,直接reutrn (LPWSTR)lpANSI;过去也可以, 反正接受的时候自己清楚就可以了。