UTF-8变成压缩编码的,转换起来比较复杂.
我写过一个函数,可以实现这个功能:
CString UTF8toUnicode(char* s)
{
int len = 0;
WCHAR* r = new WCHAR[strlen(s) * 2];
while(s[0])
{
int bytes = 1;
if(s[0] & 0x80)
while(s[0] & (0x80 >> bytes)) bytes++;
if(bytes == 1)
r[len] = s[0];
else
{
r[len] = 0;
for(char*p = s + (bytes - 1); p > s; p--)
r[len] |= ((*p) & 0x3F) << ((bytes - (p - s) - 1) * 6);
r[len] |= (s[0] & ((1 << (7 - bytes)) - 1)) << ((bytes - 1) * 6);
}
len++;
s += bytes;
}
r[len] = 0;
char*buffer = new char[len * 2 + 1];
ZeroMemory(buffer, len * 2 + 1);
::WideCharToMultiByte(CP_ACP, NULL, r, len, buffer, 1+ 2 * len, NULL, NULL);
CString str = buffer;
Delete[] r;
delete[] buffer;
return str;
}
另外,如果要省事,直接用Windows自带的记事本另存为就能转了
我写过一个函数,可以实现这个功能:
CString UTF8toUnicode(char* s)
{
int len = 0;
WCHAR* r = new WCHAR[strlen(s) * 2];
while(s[0])
{
int bytes = 1;
if(s[0] & 0x80)
while(s[0] & (0x80 >> bytes)) bytes++;
if(bytes == 1)
r[len] = s[0];
else
{
r[len] = 0;
for(char*p = s + (bytes - 1); p > s; p--)
r[len] |= ((*p) & 0x3F) << ((bytes - (p - s) - 1) * 6);
r[len] |= (s[0] & ((1 << (7 - bytes)) - 1)) << ((bytes - 1) * 6);
}
len++;
s += bytes;
}
r[len] = 0;
char*buffer = new char[len * 2 + 1];
ZeroMemory(buffer, len * 2 + 1);
::WideCharToMultiByte(CP_ACP, NULL, r, len, buffer, 1+ 2 * len, NULL, NULL);
CString str = buffer;
Delete[] r;
delete[] buffer;
return str;
}
另外,如果要省事,直接用Windows自带的记事本另存为就能转了
解决方案 »
- 求救,UDP读取游戏数据和串口通信的网络编程问题
- 使用AcceptEx等扩展函数时,包含mswsock.h的疑问.
- COM串口控制問題,有誰可以幫小弟一下嗎?
- CListView如何在窗口改变大小后自动实现排列图标为适合listctrl控件的宽度?
- 关于Release版本出错的问题....
- 请教这个类定义是什么意思? class oDynamic_OclKernel oRoot {}
- msdn不知为什么运行不好了,要运行两次才行,速度很慢!
- 已知桌面上一条直线上有A,B,C3点,C,B两点坐标及B点到A点的距离已知,如何得到A点坐标?
- 高分相求---------->if(满足)一定给分!!!
- 在VC.NET2005中DataGrid控件的列宽设置!!
- 函数或类问题
- 求教如何从asp页面中提取数据,在MFC中进行操作後存数据库
UTF8不是一种Unicode吗?
转成unicode就能在CEdit Box里面显示多语言字符串?