MultiByteToWidechar 与 WideCharToMultiByte要怎么用?能实现简体中文转繁体中文吗?

chnlog 2003-07-19 10:13:54
有大侠能告诉我吗?
...全文
300 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
喝醉的咖啡 2003-08-18
  • 打赏
  • 举报
回复
谢谢这个问题和回答的朋友,让我经验值上涨一点点,学到新东西。

看来实现转换的函数是 LCMapString,
The LCMapString function either maps an input character string to another using a specified transformation or generates a sort key for the input string.
其参数
LCMAP_SIMPLIFIED_CHINESE,LCMAP_TRADITIONAL_CHINESE 来完成这个任务。

LCMAP_SIMPLIFIED_CHINESE Windows NT 4.0 and later: Maps traditional Chinese characters to simplified Chinese characters.

LCMAP_TRADITIONAL_CHINESE Windows NT 4.0 and later: Maps simplified Chinese characters to traditional Chinese characters.
linyudie 2003-07-26
  • 打赏
  • 举报
回复
不能,繁简是在查表,没有函数
chnlog 2003-07-26
  • 打赏
  • 举报
回复
上面的代码已可以使用,测试都通过了,怎么会不能呢。回答问题前先看上面的回答。
bcb_alone 2003-07-22
  • 打赏
  • 举报
回复
piggybank(吞硬币的小猪),说的对,它们只是在多字节字符和unicode转换的。
如果如楼主说的只是那两个函数的话。我想
先用MultiByteToWidechar, 把GB-2312的字转在unicode字串。
然后用WideCharToMultiByte, 把unicode字串转成繁体字串。
不过没有试过。
chnlog 2003-07-22
  • 打赏
  • 举报
回复
谢谢 real_guang(无)

下面是GBK简体到BIG5繁体的代码(没有去动态分配字串,只分配了一个自认为足够大的空间)

wchar_t buf[4000];
char cbuf[4000];
char cbuf2[4000];
for(int i=0;i<Memo1->Lines->Count ;i++)
{
LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),
SORT_CHINESE_PRCP),LCMAP_TRADITIONAL_CHINESE,
Memo1->Lines->Strings[i].c_str(),-1,cbuf,4000);

MultiByteToWideChar(936,0,cbuf,-1,buf,4000);
WideCharToMultiByte(950,0,buf,-1,cbuf,4000,NULL,NULL);

Memo2->Lines->Add(cbuf);
}


上面这个能够实现从简体到繁体的转换

但相反的动作,即从繁体BIG5到简体GBK,却不能完全实现(很多汉字成了?,为什会无法对应呢,而中文转码器程序却可以)
代码如下

wchar_t buf[4000];
char cbuf[4000];

for(int i=0;i<Memo2->Lines->Count ;i++)
{
LCMapString(MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_TRADITIONAL),
SORT_CHINESE_PRCP),LCMAP_SIMPLIFIED_CHINESE,
Memo2->Lines->Strings[i].c_str(),-1,cbuf,4000);

MultiByteToWideChar(950,0,cbuf,-1,buf,4000);
WideCharToMultiByte(936,0,buf,-1,cbuf,4000,NULL,NULL);

Memo3->Lines->Add(cbuf);
}

有兴趣的朋友,请试试代码.

希望关注
real_guang 2003-07-21
  • 打赏
  • 举报
回复
主要是使用 LCMapString 函数 下面是delphi 例子你研究一下吧

{简体转繁体[字符串]}
function GBTOBIG5(PSource :string) :string;
var
SourceLength :integer;
TargetStr :string;
begin
SourceLength := Length(PSource) + 1;
SetLength(TargetStr, SourceLength);
LCMapString(GB_LCID, LCMAP_TRADITIONAL_CHINESE, PChar(PSource), SourceLength, PChar(TargetStr), SourceLength);
result := TargetStr;
end;
喝醉的咖啡 2003-07-19
  • 打赏
  • 举报
回复
呵呵,如果Unicode的意思是这样,岂不是还可以"EN"<->"GB2312"?
chnlog 2003-07-19
  • 打赏
  • 举报
回复
to piggybank(吞硬币的小猪)

你说的很对,可我发现win2000自带的'中文转码器'程序,没有附加任何码表文件,反向工程发现与字符有关的函数只有上述两个,所以才有此问题?

我想可以.

希望关注
喝醉的咖啡 2003-07-19
  • 打赏
  • 举报
回复
那是在多字节字符组成的字符串到Unicode字符串之间的转换
不是简体/繁体转换
无敌魔仙 2003-07-19
  • 打赏
  • 举报
回复
关注

790

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 其他移动相关
社区管理员
  • 移动开发其他问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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