求救!急急急!高手帮忙!100分奉送!编码转换问题!

TrWorks 2002-12-27 05:08:14
高手们:
我该如何将Unicode编码的字符串转换成GB2312的字符串。请大家写几句代码,指点小弟。谢谢!
...全文
69 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
NowCan 2002-12-29
  • 打赏
  • 举报
回复
就是CP_ACP啊,难道你的系统不是中文系统?
cbc 2002-12-29
  • 打赏
  • 举报
回复
WideCharToMultiByte

第一个参数用
CP_ACP, ANSI code page
TrWorks 2002-12-29
  • 打赏
  • 举报
回复
问题已经解决,感谢各位,我这就给分!
arvid_gs 2002-12-29
  • 打赏
  • 举报
回复
楼上的没有问题
你去高高,看看了不了可以
NowCan 2002-12-29
  • 打赏
  • 举报
回复
我试了,没问题呀。

#include <windows.h>
#include <stdio.h>

int main()
{
wchar_t unicode[]=L"你好,Hello!";//用L表示UNICODE字符串
char gb[128];

WideCharToMultiByte(CP_ACP,0,unicode,-1,gb,128,NULL,NULL);

printf("%s\n",gb);
return 0;
}
akiy 2002-12-27
  • 打赏
  • 举报
回复
高高,实在是高!
TrWorks 2002-12-27
  • 打赏
  • 举报
回复
现在我希望通过WideCharToMultiByte转换成功,但是他的第一个参数是:int CodePage, 这是代码页的编号,那么我该如何获得GB2312的代码页编号呢?
TrWorks 2002-12-27
  • 打赏
  • 举报
回复
开始时,我也认为不用转换,但是显示出来的是您看这样的内存:
00 32 00 33 00 34 68 77 56 39
这里的0是数字0,这样的字符串,我获取出来是没办法显示的,因为这里既有字母:00 32之类的;又有汉字:68 77之类的,而且在内存中显示的是乱麻。
我只能将Unicode转成中文操作系统能认出的GB2312编码。
CLongSan 2002-12-27
  • 打赏
  • 举报
回复
Unicode可以看成俩字节的unsigned char
unsigned char p[10];
CString str;

memset(p,0,10);
strcpy((char*)p,"中国人");
str =p;
realdreamer 2002-12-27
  • 打赏
  • 举报
回复
不用转换.首先确保你是NT/2000/XP 系统. 不然无法正常使用 UNICODE 字符.


如果你的程序中只是这一处字符串为 UNICODE , 那么, 尝试使用 UNICODE 版本的函数 CreateWindowW ...等(特征是末尾有 W)

另一个办法就是先转换为 MBCS 再使用.

如果你的程序到处是 UNICODE 字符串. 考虑在头文件最前面定义 UNICODE 和 _UNICODE 两个宏. 字符串全部用 TEXT() 宏括起!

#define UNICODE
#define _UNICODE

TrWorks 2002-12-27
  • 打赏
  • 举报
回复
您可以从Code Page中找到GB2312的代码页。我不知道该用什么函数将这个Unicom串转成GB2312代码页的字符串。
TrWorks 2002-12-27
  • 打赏
  • 举报
回复
我的问题不是Unicode和ASCII的转换!
我的问题是:Unicode和GB2312(汉字)的转换。现在,我有一个字符串里放着Unicode,但是我希望将它转换成汉字(汉字的编码规范是GB2312)。
NowCan 2002-12-27
  • 打赏
  • 举报
回复
要注意的问题:GB串要有足够的空间,否则函数会失败。
NowCan 2002-12-27
  • 打赏
  • 举报
回复
WideCharToMultiByte

第一个参数用CP_ACP,第二个用0,第三个是Unicode串,第四个用-1,第五个是GB串,第六个是GB串的长度,然后两个参数都是NULL。

arvid_gs 2002-12-27
  • 打赏
  • 举报
回复
将ANSI转换到Unicode
(1)通过L这个宏来实现,例如: CLSIDFromProgID( L"MAPI.Folder",&clsid);
(2)通过MultiByteToWideChar函数实现转换,例如:
char *szProgID = "MAPI.Folder";
WCHAR szWideProgID[128];
CLSID clsid;
long lLen = MultiByteToWideChar(CP_ACP,0,szProgID,strlen(szProgID),szWideProgID,sizeof(szWideProgID));
szWideProgID[lLen] = '\0';
(3)通过A2W宏来实现,例如:
USES_CONVERSION;
CLSIDFromProgID( A2W(szProgID),&clsid);

将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);
loopyifly 2002-12-27
  • 打赏
  • 举报
回复
up

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧