繁简转换纪要

繁简转换是老技术,但如果方法不当,还是得花一点时间的,本文尽量阐明其中的陷阱,减少新手的时间。

首先繁简转换不等于Big5 to GBK。GBK包含Big5中的所有繁体字,所以你平时看到的繁体不一定就是Big5的。word中的繁简转换就只是在GBK编码中进行。很多繁简转换的工具是Big5 to GBK,所以如果你的文本不是Big5编码的,那么转换结果肯定是乱码。在简体的操作系统上,你把“專案管理導出範本”这几个字复制到记事本中,这几个字其实是GBK编码,如果你想保存在BIG5编码的文件中,要复制到word中,点击另存为,将保存类型设为txt,接着word会出现一个对话框让你选择编码,选择big5即可。了解这一点后下一步就很容易了。

下面我们要把"專案管理導出範本.xls"转换成简体:

GBK编码的繁简转换方法(VC)

char *strTemp="專案管理導出範本.xls";
//把区域设置为简体
WORD wLCID = MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_CHINESE_BIG5);
//获取转换后的字符串的长度。
//把字符串映射到简体编码之上。
int nReturn = LCMapString(wLCID, LCMAP_SIMPLIFIED_CHINESE, strTemp, k, NULL, 0);

char *myStr = new char[nReturn+1];//结果字符串
LCMapString(wLCID,LCMAP_SIMPLIFIED_CHINESE,
 (LPCSTR)strTemp, nReturn,
 (LPSTR)myStr, nReturn+1);
myStr[nReturn] = '/0';

AfxMessageBox(myStr);

如果你使用delphi,代码就更简单:
function Big52Gb(Str:string):string;
begin
  SetLength(Result,Length(Str));
  LCMapString(GetUserDefaultLCID,LCMAP_SIMPLIFIED_CHINESE,
    PChar(Str),Length(Str),
    PChar(Result),Length(Result));
end;

如果你执着于不使用API,要自己实现,那么首先要把GBK编码转换成BIG5编码,方法是先转换为Unicode,再转换为Big5(在此谢谢CSDN上的朋友):
CString Convert(CString str, int sourceCodepage, int targetCodepage)
{
 int len=str.GetLength();

 //先转成WideChar
 //codepage按照什么来读取传入的字符串。
 int unicodeLen=MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0);

 wchar_t * pUnicode;
 pUnicode=new wchar_t[unicodeLen+1];

 memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));

 MultiByteToWideChar(sourceCodepage,0,str,-1,(LPWSTR)pUnicode,unicodeLen);

 //再转成二进制流(或者说是字符流,就是最终的字符。)
 BYTE * pTargetData;
 int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);

 pTargetData=new BYTE[targetLen+1];
 memset(pTargetData,0,targetLen+1);

 WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);

 CString rt;
 rt.Format("%s",pTargetData);

 delete pUnicode;
 delete pTargetData;
 return rt;
}
得到Big5编码的字符串后,你就可以进行Big5 to GB的转换了,详细算法描述见 GBK字符集知识(http://www.hacker.com.cn/article/list.asp?id=3697)。网上还有现成的VC、java、python实现源代码,在此不再赘述。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值