中文 转gbk编码_实战经验:获取中文的拼音表示

问题

碰到这样的需求,给定一个中文字符,如”中”,获取其拼音表示,如:zhong。

思路

在Unicode开发环境下,每一个字符,不论它是中文字符,还是ASCII字符,都是用两个字节表示。例如:

TCHAR ch1 = _T(‘A’);

这里的ch1的大小是两个字节,ch1的值为0x0041。

TCHAR ch2 = _T(‘中’);

这里的ch2的大小是也是两个字节,ch1的值为0x4E2D。

想要得到汉字的拼音,必须先得到汉字对应的GB2312/GBK机内码。这里需要注意的是,Unicode字符集和GB2312/GBK字符集是两套互不兼容的字符编码标准,比如”中”字的Unicode编码为0x4E2D,而它的GB2312/GBK编码为0xD6D0。

得到汉字对应的GB2312/GBK机内码之后,可以通过查询GB2312/GBK标准来得到其对应的拼音了。

实现方法

1) 通过WideCharToMultiByte将Unicode字符集转换为ANSI字符集。

2) 判断转换的ANSI字符是否是ASCII字符,可以使用isascii函数来进行判断。

3) 如果转换的ANSI字符的高低字节都大于0xA0,则表示这是一个中文字符,可以通过如下的公式获取其GB2312/GBK机内码。

chHigh = 高8位字节(中文字符);

chLow = 低8位字节(中文字符);

GBK = (chHigh – 0xA0) * 100 + chLow – 0xA0;

4) 根据GB2312/GBK表查询对应的拼音表示。

总结

对于没有对应关系的两个字符集Unicode和GB2312/GBK来说,也只能通过查表的方式找出对应关系了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值