实战经验:获取中文的拼音表示

问题

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


实战经验:获取中文的拼音表示_第1张图片

你可能感兴趣的:(实战经验:获取中文的拼音表示)