servlet的getparameter只能获取个别汉字_实战经验:获取中文的拼音表示

这篇博客探讨了如何在Unicode环境下将中文字符转换为其拼音表示。首先,每个字符无论是ASCII还是中文,都是用两个字节表示。然后,通过 WideCharToMultiByte 函数将Unicode转换为ANSI字符集,再判断是否为中文字符。对于中文字符,通过GB2312/GBK编码查询对应的拼音。整个过程涉及字符编码的转换和查表操作,以解决不同字符集之间的兼容性问题。
摘要由CSDN通过智能技术生成

问题

碰到这样的需求,给定一个中文字符,如”中”,获取其拼音表示,如: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来说,也只能通过查表的方式找出对应关系了。

7b0a17a0448c0fa71fe1f16cfeffae9c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值