求UTF8如何转成GB2312原码!请各位高手给出原码。
如把联通转成联通
如把联通转成联通
解决方案 »
- (LPCTSTR)(CString + wchar_t[])
- 如何能够根据参数要求将data数组前n个字节转成CString.
- 我想在一个对话框中添加一个右键的菜单来显示信息,请问如何实现,初学mfc,希望大家帮帮忙,谢谢
- HTML中,我想显示.tga格式的图片怎么办?
- ***告别2005最后一天,工作总结_暨_和往事干杯***
- Jeffrey Richter编写的<<Windows核心编程>>这本书,哪里有电子版本可以下载,谢谢
- 请问如何删除FlexGrid中的一行数据
- 关于OpenGL
- SDK问题
- 用串口调试助手v2.1调试GSM模块发短信
- 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;过去也可以, 反正接受的时候自己清楚就可以了。