关于汉字转化为拼音

最近需要在车机上增加蓝牙电话薄功能,其中最重要的一个功能是需要通过人名的拼音或首字母来查询电话薄,比较好的一个实现方式是首先将电话薄中中文姓名转化为拼音和拼音对应首字母,然后跟用户输入的拼音字符串进行匹配,如果匹配成功,则将电话薄中匹配的记录显示出来。所以第一个问题是解决汉字转化为拼音的问题。如何将汉字转化为拼音呢?

        最好的期望是有一张汉字对应拼音的一个列表,里面列举出每个汉字对应的拼音,通过这个列表,能够比较快速的得到某个汉字对应的拼音,考虑到存在多音字的问题,一个汉字可能对应多个拼音,所以这个表的设计必须是一对多的关系,分析到这里,如何实现这个汉字对应拼音的列表是关键。

        还好,在Google上找到一份Unicode汉字对应的拼音列表,这里要感谢原作者Koichi Yasuoka的辛苦整理和共享。

        截取文件的部分内容如下:

[plain] view plain copy print ?
  1. #   Name:            Unicode Pinyin table 
  2. #   Unicode version: 1.1 
  3. #   Table version:   0.496 
  4. #   Table format:    Format A 
  5. #   Date:            18 August 1997 
  6. #   Author:          Koichi Yasuoka  
  7. #   General notes: 
  8. #   This table contains the data on how Unicode Hanzi characters 
  9. #   are pronounced in P.R.China.  This table was originally based 
  10. #   on "TONEPY.tit" by Yongguang Zhang .  Here 
  11. #   the author expresses his appreciation to Christian Wittern 
  12. #   , Jim Breen
  13. #   and Jack Halpern
  14. #   Format:  Six tab-separated columns 
  15. #            Column #1 is the Unicode (in hex) 
  16. #            Columns #2 to #6 are Pinyin (tone '5' means Qingsheng) 
  17. #   The entries are in Unicode order. 
  18. 3007    ling2 
  19. 4E00    yi1 
  20. 4E01    ding1 
  21. 4E02    kao3 
  22. 4E03    qi1 
  23. 4E04    shang4  shang3 
  24. 4E05    xia4 
  25. 4E06 
  26. 4E07    wan4    mo4 
  27. 4E08    zhang4 
  28. 4E09    san1 
  29. 4E0A    shang4  shang3 
  30. 4E0B    xia4 
  31. 4E0C    ji1 
  32. 4E0D    bu4 
  33. 4E0E    yu3 yu4 
  34. 4E0F    mian3 
#
#	Name:            Unicode Pinyin table
#	Unicode version: 1.1
#	Table version:   0.496
#	Table format:    Format A
#	Date:            18 August 1997
#	Author:          Koichi Yasuoka 
#
#	General notes:
#
#	This table contains the data on how Unicode Hanzi characters
#	are pronounced in P.R.China.  This table was originally based
#	on "TONEPY.tit" by Yongguang Zhang .  Here
#	the author expresses his appreciation to Christian Wittern
#	, Jim Breen ,
#	and Jack Halpern .
#
#	Format:  Six tab-separated columns
#	         Column #1 is the Unicode (in hex)
#	         Columns #2 to #6 are Pinyin (tone '5' means Qingsheng)
#
#	The entries are in Unicode order.
#
#
3007	ling2
4E00	yi1
4E01	ding1
4E02	kao3
4E03	qi1
4E04	shang4	shang3
4E05	xia4
4E06
4E07	wan4	mo4
4E08	zhang4
4E09	san1
4E0A	shang4	shang3
4E0B	xia4
4E0C	ji1
4E0D	bu4
4E0E	yu3	yu4
4E0F	mian3

        文件按照Unicode编码顺序进行整理,每行第一列是Unicode汉字的16进制编码,第二列到第N列是汉字对应所有的拼音字符串,拼音后面的1--5数字为拼音的声调。

        为什么要采用Unicode而不使用GB2312,因为GB2312收录的汉字只包含了中国大陆99.75%的使用频率,对于一些人名、古汉语等方面出现的罕用字,GB2312不能表示示。而Unicode收录的汉字会比较全一些,包括一些古体字和生僻字都能表示 。 所以这里采用Uincode,这样电话薄中的人名即使含有一些生僻的汉字,也能处理。

        通过该表,可以很方便通过汉字的Unicode编码查询到对应的拼字字符串和首字母,即使是多音字也能处理。

        这里,基于该表实现了一个Unicode汉字转拼音的类,可以方便的将汉字字符串转化为拼音或拼音首字母。

        以下是头文件:

[cpp] view plain copy print ?
  1. /********************************************************************
  2. filename:   Hanzi2Pinyin.h
  3. created:    2012-06-07
  4. author:     firehood
  5. purpose:    Unicode汉字转化为拼音
  6. *********************************************************************/ 
  7. #pragma once 
  8. #include  
  9. #include  
  10. #include  
  11. using namespace std; 
  12.  
  13. typedef vector  PinyinList; 
  14. typedef vector<char>    FirstLetterList; 
  15.  
  16. class CHanzi2Pinyin 
  17. public
  18.     CHanzi2Pinyin(void); 
  19.     ~CHanzi2Pinyin(void); 
  20. public
  21.     /**********************************************************
  22.     函数名:Hanzi2Pinyin
  23.     功能:  单个Unicode汉字字符转化为拼音字符串
  24.     参数:
  25.     [in]wch:                 Unicode汉字字符
  26.     [out]pinyinList:         转化后的拼音字符串,因为汉字存在多音字,转换后的拼音字串存在PinyinList表中
  27.     [out]firstLetterList:    汉字对应拼音的首字母列表(以大写字母表示)
  28.     返回值:
  29.     TRUE:  成功  FALSE:失败
  30.     ***********************************************************/   
  31.     BOOL Hanzi2Pinyin(const wchar_t wch, PinyinList& pinyinList,FirstLetterList &firstLetterList); 
  32.     /**********************************************************
  33.     函数名:Hanzi2Pinyin
  34.     功能:  Unicode汉字字符串转化为拼音字符串
  35.     参数:
  36.     [in]wch:                 Unicode汉字字符串
  37.     [out]pinyinList:         转化后的拼音字符串,因为汉字存在多音字,转换后的拼音字串存在PinyinList表中
  38.                              如果汉字中存在多音字,会将拼音字符串的所有可能组合列举出来。
  39.                              比如对于汉字"行长重"转化后的拼音字符串会有以下8中组合情况。
  40.                              "xing chang zhong","xing chang chong",
  41.                              "xing zhang zhong","xing zhang chong",
  42.                              "hang chang zhong","hang chang chong",
  43.                              "hang zhang zhong","hang zhang chong".
  44.                              每个拼音之间用空格分隔
  45.     [out]firstLetterList:    汉字对应拼音的首字母字符串列表(以大写字母表示)
  46.                              比如对于汉字"行长重"转化后的拼音字符串会有以下8中组合情况。
  47.                              "XCZ","XCC",
  48.                              "XZZ","XZC",
  49.                              "HCZ","HCC",
  50.                              "HZZ","HZC"
  51.     返回值:
  52.     TRUE:  成功  FALSE:失败
  53.     ***********************************************************/   
  54.     BOOL Hanzi2Pinyin(const wchar_t *wstr,int len, PinyinList& pinyinList,PinyinList &firstLetterList); 
  55. private
  56.     BOOL Init(); 
  57.     void Uninit(); 
  58. private
  59.     FILE* m_pFile; 
  60.     UINT  m_nBasePos; 
  61. }; 
/********************************************************************
filename: 	Hanzi2Pinyin.h
created:	2012-06-07
author:		firehood

purpose:	Unicode汉字转化为拼音
*********************************************************************/
#pragma once
#include 
#include 
#include 
using namespace std;

typedef vector  PinyinList;
typedef vector    FirstLetterList;

class CHanzi2Pinyin
{
public:
	CHanzi2Pinyin(void);
	~CHanzi2Pinyin(void);
public:
	/********************************************************** 
	函数名:Hanzi2Pinyin
	功能:  单个Unicode汉字字符转化为拼音字符串
	参数: 
	[in]wch:                 Unicode汉字字符
	[out]pinyinList:         转化后的拼音字符串,因为汉字存在多音字,转换后的拼音字串存在PinyinList表中
	[out]firstLetterList:    汉字对应拼音的首字母列表(以大写字母表示)
	返回值: 
	TRUE:  成功  FALSE:失败 
	***********************************************************/  
	BOOL Hanzi2Pinyin(const wchar_t wch, PinyinList& pinyinList,FirstLetterList &firstLetterList);
	/********************************************************** 
	函数名:Hanzi2Pinyin
	功能:  Unicode汉字字符串转化为拼音字符串
	参数: 
	[in]wch:                 Unicode汉字字符串
	[out]pinyinList:         转化后的拼音字符串,因为汉字存在多音字,转换后的拼音字串存在PinyinList表中
	                         如果汉字中存在多音字,会将拼音字符串的所有可能组合列举出来。
							 比如对于汉字"行长重"转化后的拼音字符串会有以下8中组合情况。
							 "xing chang zhong","xing chang chong",
							 "xing zhang zhong","xing zhang chong",
							 "hang chang zhong","hang chang chong",
							 "hang zhang zhong","hang zhang chong".
							 每个拼音之间用空格分隔
	[out]firstLetterList:    汉字对应拼音的首字母字符串列表(以大写字母表示)
	                         比如对于汉字"行长重"转化后的拼音字符串会有以下8中组合情况。
	                         "XCZ","XCC",
	                         "XZZ","XZC",
	                         "HCZ","HCC",
	                         "HZZ","HZC"
	返回值: 
	TRUE:  成功  FALSE:失败 
	***********************************************************/  
	BOOL Hanzi2Pinyin(const wchar_t *wstr,int len, PinyinList& pinyinList,PinyinList &firstLetterList);
private:
	BOOL Init();
	void Uninit();
private:
    FILE* m_pFile;
	UINT  m_nBasePos;
};


           源文件如下:

[cpp] view plain copy print ?
  1. /********************************************************************
  2. filename:   Hanzi2Pinyin.cpp
  3. created:    2012-06-07
  4. author:     firehood
  5. purpose:    Unicode汉字转化为拼音
  6. *********************************************************************/ 
  7. #include "stdafx.h" 
  8. #include "Hanzi2Pinyin.h" 
  9. #include  
  10.  
  11. #define UINCODE_HANZI_START    0x4E00  
  12. #define UINCODE_HANZI_END      0x9FA5 
  13.  
  14. // 定义资源文件路径 
  15. #define HANZI2PIN_RES_PATH     "E:\\zfhu\\Uni2Pinyin\\Uni2Pinyin.DAT"//"E:\\资料\\Hanzi2Pinyin\\Uni2Pinyin.DAT" 
  16.  
  17. CHanzi2Pinyin::CHanzi2Pinyin(void): 
  18. m_pFile(NULL), 
  19. m_nBasePos(0) 
  20.     Init(); 
  21.  
  22. CHanzi2Pinyin::~CHanzi2Pinyin(void
  23.     Uninit(); 
  24.  
  25. BOOL CHanzi2Pinyin::Init() 
  26.     char strline[64] = {0}; 
  27.     int nPos = 0; 
  28.     // 如果之前有初始化,先卸载 
  29.     if(m_pFile) 
  30.     { 
  31.         Uninit(); 
  32.     } 
  33.     // 打开Unicode拼音编码表 
  34.     m_pFile = fopen(HANZI2PIN_RES_PATH, "rb");   
  35.     if(m_pFile == NULL) 
  36.     { 
  37.         return FALSE; 
  38.     } 
  39.     BOOL bRet = FALSE; 
  40.     // 读取一行,直到找到编码的起始位置 
  41.     while(fgets(strline,sizeof(strline),m_pFile))   
  42.     {   
  43.         if(strtoul(strline,NULL,16) == UINCODE_HANZI_START) 
  44.         { 
  45.             m_nBasePos = nPos; 
  46.             bRet = TRUE; 
  47.             break
  48.         } 
  49.         nPos = ftell(m_pFile); 
  50.     }   
  51.     return bRet; 
  52.  
  53. void CHanzi2Pinyin::Uninit() 
  54.     if(m_pFile) 
  55.         fclose(m_pFile); 
  56.     m_nBasePos = 0; 
  57.  
  58. BOOL CHanzi2Pinyin::Hanzi2Pinyin(const wchar_t wch,PinyinList& pinyinList,FirstLetterList &firstLetterList) 
  59.     // 判断字符是否为汉字 
  60.     if((wch < UINCODE_HANZI_START) || (wch > UINCODE_HANZI_END)) 
  61.     { 
  62.         // 不是汉字,直接返回 
  63.         return FALSE; 
  64.     } 
  65.     if(m_pFile == NULL) 
  66.     { 
  67.         // 初始化 
  68.         if(!Init()) 
  69.         { 
  70.             return FALSE; 
  71.         } 
  72.     } 
  73.     // 移动文件指针到表的起始位置 
  74.     fseek(m_pFile, m_nBasePos, SEEK_SET); 
  75.     // 计算行数 
  76.     int lineCount = wch - UINCODE_HANZI_START; 
  77.     char strline[64] = {0}; 
  78.     // 读取lineCount行 
  79.     while(lineCount--) 
  80.     { 
  81.         fgets(strline,sizeof(strline),m_pFile); 
  82.     } 
  83.     memset(strline,0,sizeof(strline)); 
  84.     fgets(strline,sizeof(strline),m_pFile);  
  85.     // 判断是否定位到正确位置 
  86.     if(strtoul(strline,NULL,16) != wch) 
  87.     { 
  88.         return FALSE; 
  89.     } 
  90.  
  91.     string pinyinStr = ""
  92.     BOOL bFindPinyin = FALSE; 
  93.     UINT i = 0; 
  94.     for(i = 4;i
  95.     { 
  96.         // 判断字符是否为拼音字符,拼音字符必须在a~z之间 
  97.         if(strline[i]>='a' && strline[i]<='z')  
  98.         { 
  99.             bFindPinyin = TRUE; 
  100.             pinyinStr += strline[i]; 
  101.         } 
  102.         else // 不是拼音字符 
  103.         { 
  104.             if(bFindPinyin)  
  105.             { 
  106.                 // 查找vector是否已存在该拼音字串,没有则添加 
  107.                 if(std::find(pinyinList.begin(),pinyinList.end(),pinyinStr) == pinyinList.end()) 
  108.                 { 
  109.                     // 存在将拼音字串存入到vector中 
  110.                     pinyinList.push_back(pinyinStr); 
  111.                 } 
  112.                 if(std::find(firstLetterList.begin(),firstLetterList.end(),pinyinStr[0]-32)==firstLetterList.end()) 
  113.                 { 
  114.                     // 将拼音首字母存入到vector中 
  115.                     firstLetterList.push_back(pinyinStr[0]-32); 
  116.                 } 
  117.                 pinyinStr = ""
  118.                 bFindPinyin = FALSE; 
  119.             } 
  120.         } 
  121.     } 
  122.     if(bFindPinyin) 
  123.     {   // 查找vector是否已存在该拼音字串,没有则添加 
  124.         if(std::find(pinyinList.begin(),pinyinList.end(),pinyinStr) == pinyinList.end()) 
  125.         { 
  126.             // 存在将拼音字串存入到vector中 
  127.             pinyinList.push_back(pinyinStr); 
  128.         } 
  129.         if(std::find(firstLetterList.begin(),firstLetterList.end(),pinyinStr[0]-32)==firstLetterList.end()) 
  130.         { 
  131.             // 将拼音首字母存入到vector中 
  132.             firstLetterList.push_back(pinyinStr[0]-32); 
  133.         } 
  134.     } 
  135.     return TRUE; 
  136.  
  137. // 定义转化后拼音列表的最大长度(如果要转化的汉字字串中不存在多音字,则转换后拼音字串只有一行;若存在多音字,则将所有可能的拼音组合列举出来) 
  138. static const UINT MAX_PINYINLISTCOUNT = 8; 
  139. BOOL CHanzi2Pinyin::Hanzi2Pinyin(const wchar_t *wstr,int len, PinyinList& pinyinList,PinyinList &firstLetterList) 
  140.     // 参数有效性检查 
  141.     if(wstr == NULL && len <=0)  
  142.     { 
  143.         return FALSE; 
  144.     } 
  145.     string pinyinStr[MAX_PINYINLISTCOUNT],tempPinyinStr[MAX_PINYINLISTCOUNT];        // 存放一组汉字对应的拼音字符串 
  146.     string firstletterStr[MAX_PINYINLISTCOUNT],tempfirstLetter[MAX_PINYINLISTCOUNT]; // 存放一组汉字对应的拼音首字母字符串 
  147.     int nlistCountPY = 0, nlistCountFL = 0;  
  148.     int indexPY = 0,indexFL = 0; 
  149.     // 缓存单个汉字的拼音字符串列表,一个汉字可能能有多个拼音 
  150.     PinyinList *singlePinyinList = new PinyinList[len]; 
  151.     FirstLetterList *firstLettterList = new FirstLetterList[len]; 
  152.     for(int i=0;i
  153.     { 
  154.         // 将单个汉字转化为拼音 
  155.         if(!Hanzi2Pinyin(wstr[i],singlePinyinList[i],firstLettterList[i])) 
  156.             continue
  157.         if(nlistCountPY == 0) 
  158.         { 
  159.             for(UINT n = 0;n
  160.             { 
  161.                 if(indexPY >= MAX_PINYINLISTCOUNT) 
  162.                 { 
  163.                     break
  164.                 } 
  165.                 pinyinStr[indexPY++] = singlePinyinList[i][n]; 
  166.                 if(n
  167.                     firstletterStr[indexFL++] = firstLettterList[i][n]; 
  168.             } 
  169.         } 
  170.         else 
  171.         { 
  172.             // 拷贝到临时缓存中,用以做拼接处理 
  173.             for(int m = 0; m
  174.             { 
  175.                 tempPinyinStr[m] = pinyinStr[m]; 
  176.                 tempfirstLetter[m] = firstletterStr[m]; 
  177.             } 
  178.             for(int m = 0; m
  179.             { 
  180.                 for(UINT n = 0;n
  181.                 { 
  182.                     if(indexPY >= MAX_PINYINLISTCOUNT) 
  183.                     { 
  184.                         break
  185.                     } 
  186.                     pinyinStr[indexPY++] = tempPinyinStr[m] + " " + singlePinyinList[i][n]; 
  187.                     if(m
  188.                     { 
  189.                         firstletterStr[indexFL++] = tempfirstLetter[m] + firstLettterList[i][n]; 
  190.                     } 
  191.                 } 
  192.             } 
  193.         } 
  194.         nlistCountPY = indexPY; 
  195.         nlistCountFL = indexFL; 
  196.         indexPY = 0; 
  197.         indexFL = 0; 
  198.     } 
  199.     for(int i=0;i
  200.     { 
  201.         pinyinList.push_back(pinyinStr[i]); 
  202.     } 
  203.     for(int i=0;i
  204.     { 
  205.         firstLetterList.push_back(firstletterStr[i]); 
  206.     } 
  207.     delete[] singlePinyinList; 
  208.     delete[] firstLettterList; 
  209.     return TRUE; 
/********************************************************************
filename: 	Hanzi2Pinyin.cpp
created:	2012-06-07
author:		firehood

purpose:	Unicode汉字转化为拼音
*********************************************************************/
#include "stdafx.h"
#include "Hanzi2Pinyin.h"
#include 

#define UINCODE_HANZI_START    0x4E00 
#define UINCODE_HANZI_END      0x9FA5

// 定义资源文件路径
#define HANZI2PIN_RES_PATH     "E:\\zfhu\\Uni2Pinyin\\Uni2Pinyin.DAT"//"E:\\资料\\Hanzi2Pinyin\\Uni2Pinyin.DAT"

CHanzi2Pinyin::CHanzi2Pinyin(void):
m_pFile(NULL),
m_nBasePos(0)
{
	Init();
}

CHanzi2Pinyin::~CHanzi2Pinyin(void)
{
	Uninit();
}

BOOL CHanzi2Pinyin::Init()
{
	char strline[64] = {0};
	int nPos = 0;
	// 如果之前有初始化,先卸载
	if(m_pFile)
	{
		Uninit();
	}
	// 打开Unicode拼音编码表
	m_pFile = fopen(HANZI2PIN_RES_PATH, "rb");  
	if(m_pFile == NULL)
	{
		return FALSE;
	}
	BOOL bRet = FALSE;
	// 读取一行,直到找到编码的起始位置
	while(fgets(strline,sizeof(strline),m_pFile))  
	{  
		if(strtoul(strline,NULL,16) == UINCODE_HANZI_START)
		{
			m_nBasePos = nPos;
			bRet = TRUE;
			break;
		}
		nPos = ftell(m_pFile);
	}  
	return bRet;
}

void CHanzi2Pinyin::Uninit()
{
	if(m_pFile)
		fclose(m_pFile);
	m_nBasePos = 0;
}

BOOL CHanzi2Pinyin::Hanzi2Pinyin(const wchar_t wch,PinyinList& pinyinList,FirstLetterList &firstLetterList)
{
	// 判断字符是否为汉字
	if((wch < UINCODE_HANZI_START) || (wch > UINCODE_HANZI_END))
	{
		// 不是汉字,直接返回
		return FALSE;
	}
	if(m_pFile == NULL)
	{
		// 初始化
		if(!Init())
		{
			return FALSE;
		}
	}
	// 移动文件指针到表的起始位置
	fseek(m_pFile, m_nBasePos, SEEK_SET);
	// 计算行数
	int lineCount = wch - UINCODE_HANZI_START;
	char strline[64] = {0};
	// 读取lineCount行
	while(lineCount--)
	{
		fgets(strline,sizeof(strline),m_pFile);
	}
    memset(strline,0,sizeof(strline));
    fgets(strline,sizeof(strline),m_pFile); 
	// 判断是否定位到正确位置
	if(strtoul(strline,NULL,16) != wch)
	{
		return FALSE;
	}

	string pinyinStr = "";
	BOOL bFindPinyin = FALSE;
	UINT i = 0;
	for(i = 4;i='a' && strline[i]<='z') 
		{
			bFindPinyin = TRUE;
			pinyinStr += strline[i];
		}
		else // 不是拼音字符
		{
			if(bFindPinyin) 
			{
				// 查找vector是否已存在该拼音字串,没有则添加
				if(std::find(pinyinList.begin(),pinyinList.end(),pinyinStr) == pinyinList.end())
				{
					// 存在将拼音字串存入到vector中
					pinyinList.push_back(pinyinStr);
				}
				if(std::find(firstLetterList.begin(),firstLetterList.end(),pinyinStr[0]-32)==firstLetterList.end())
				{
					// 将拼音首字母存入到vector中
					firstLetterList.push_back(pinyinStr[0]-32);
				}
				pinyinStr = "";
				bFindPinyin = FALSE;
			}
		}
	}
	if(bFindPinyin)
	{   // 查找vector是否已存在该拼音字串,没有则添加
		if(std::find(pinyinList.begin(),pinyinList.end(),pinyinStr) == pinyinList.end())
		{
			// 存在将拼音字串存入到vector中
			pinyinList.push_back(pinyinStr);
		}
		if(std::find(firstLetterList.begin(),firstLetterList.end(),pinyinStr[0]-32)==firstLetterList.end())
		{
			// 将拼音首字母存入到vector中
			firstLetterList.push_back(pinyinStr[0]-32);
		}
	}
	return TRUE;
}

// 定义转化后拼音列表的最大长度(如果要转化的汉字字串中不存在多音字,则转换后拼音字串只有一行;若存在多音字,则将所有可能的拼音组合列举出来)
static const UINT MAX_PINYINLISTCOUNT = 8;
BOOL CHanzi2Pinyin::Hanzi2Pinyin(const wchar_t *wstr,int len, PinyinList& pinyinList,PinyinList &firstLetterList)
{
    // 参数有效性检查
	if(wstr == NULL && len <=0) 
	{
		return FALSE;
	}
	string pinyinStr[MAX_PINYINLISTCOUNT],tempPinyinStr[MAX_PINYINLISTCOUNT];        // 存放一组汉字对应的拼音字符串
	string firstletterStr[MAX_PINYINLISTCOUNT],tempfirstLetter[MAX_PINYINLISTCOUNT]; // 存放一组汉字对应的拼音首字母字符串
	int nlistCountPY = 0, nlistCountFL = 0; 
	int indexPY = 0,indexFL = 0;
	// 缓存单个汉字的拼音字符串列表,一个汉字可能能有多个拼音
    PinyinList *singlePinyinList = new PinyinList[len];
	FirstLetterList *firstLettterList = new FirstLetterList[len];
	for(int i=0;i= MAX_PINYINLISTCOUNT)
				{
					break;
				}
				pinyinStr[indexPY++] = singlePinyinList[i][n];
				if(n= MAX_PINYINLISTCOUNT)
					{
						break;
					}
					pinyinStr[indexPY++] = tempPinyinStr[m] + " " + singlePinyinList[i][n];
					if(m

        基于CHanzi2Pinyin类实现了一个汉字转拼音的工具,测试效果如下:

1. 汉字转化为拼音

2. 汉字转化为拼音首字母


          最后,在次感谢Unicode汉字转拼音文件的作者Koichi Yasuoka!


 

你可能感兴趣的:(关于汉字转化为拼音)