C# 转繁体转简体转拼音,超级文本大转换

最近项目中遇到一个需求:把员工的中文姓名根据系统配置转换成中文简体或中文繁体。

原以为需要一个很大的一个简体和繁体相对应的字符对应表之类的东西。

后来发现,VB中就包含了这样的函数Strings.StrConv(this.TextBox1.Text.Trim(), VbStrConv.TraditionalChinese, 0);

 

在网上搜索一下,还搜索到了转拼音,好东西,一定要收藏起来。哈哈!

 

 

ExpandedBlockStart.gif
using  System;

using  System.Collections;

using  System.Globalization;
using  System.Text;
using  System.Threading;
using  Microsoft.VisualBasic;

namespace  pcmax {
    
///   <summary>
    
///  汉字转拼音工具。
    
///   </summary>
     public   sealed   class  CHS2PinYin {
        
///   <summary>
        
///  包含字符 ASC 码的整形数组。
        
///   </summary>
         private   static   int [] pv  =   new   int [] {  - 20319 - 20317 - 20304 - 20295 - 20292 - 20283 - 20265 - 20257 - 20242 - 20230 - 20051 - 20036 - 20032 ,
                                                
- 20026 - 20002 - 19990 - 19986 - 19982 - 19976 - 19805 - 19784 - 19775 - 19774 - 19763 - 19756 - 19751 - 19746 - 19741 ,
                                                
- 19739 - 19728 - 19725 - 19715 - 19540 - 19531 - 19525 - 19515 - 19500 - 19484 - 19479 - 19467 - 19289 - 19288 - 19281 ,
                                                
- 19275 - 19270 - 19263 - 19261 - 19249 - 19243 - 19242 - 19238 - 19235 - 19227 - 19224 - 19218 - 19212 - 19038 - 19023 ,
                                                
- 19018 - 19006 - 19003 - 18996 - 18977 - 18961 - 18952 - 18783 - 18774 - 18773 - 18763 - 18756 - 18741 - 18735 - 18731 ,
                                                
- 18722 - 18710 - 18697 - 18696 - 18526 - 18518 - 18501 - 18490 - 18478 - 18463 - 18448 - 18447 - 18446 - 18239 - 18237 ,
                                                
- 18231 - 18220 - 18211 - 18201 - 18184 - 18183 - 18181 - 18012 - 17997 - 17988 - 17970 - 17964 - 17961 - 17950 - 17947 ,
                                                
- 17931 - 17928 - 17922 - 17759 - 17752 - 17733 - 17730 - 17721 - 17703 - 17701 - 17697 - 17692 - 17683 - 17676 - 17496 ,
                                                
- 17487 - 17482 - 17468 - 17454 - 17433 - 17427 - 17417 - 17202 - 17185 - 16983 - 16970 - 16942 - 16915 - 16733 - 16708 ,
                                                
- 16706 - 16689 - 16664 - 16657 - 16647 - 16474 - 16470 - 16465 - 16459 - 16452 - 16448 - 16433 - 16429 - 16427 - 16423 ,
                                                
- 16419 - 16412 - 16407 - 16403 - 16401 - 16393 - 16220 - 16216 - 16212 - 16205 - 16202 - 16187 - 16180 - 16171 - 16169 ,
                                                
- 16158 - 16155 - 15959 - 15958 - 15944 - 15933 - 15920 - 15915 - 15903 - 15889 - 15878 - 15707 - 15701 - 15681 - 15667 ,
                                                
- 15661 - 15659 - 15652 - 15640 - 15631 - 15625 - 15454 - 15448 - 15436 - 15435 - 15419 - 15416 - 15408 - 15394 - 15385 ,
                                                
- 15377 - 15375 - 15369 - 15363 - 15362 - 15183 - 15180 - 15165 - 15158 - 15153 - 15150 - 15149 - 15144 - 15143 - 15141 ,
                                                
- 15140 - 15139 - 15128 - 15121 - 15119 - 15117 - 15110 - 15109 - 14941 - 14937 - 14933 - 14930 - 14929 - 14928 - 14926 ,
                                                
- 14922 - 14921 - 14914 - 14908 - 14902 - 14894 - 14889 - 14882 - 14873 - 14871 - 14857 - 14678 - 14674 - 14670 - 14668 ,
                                                
- 14663 - 14654 - 14645 - 14630 - 14594 - 14429 - 14407 - 14399 - 14384 - 14379 - 14368 - 14355 - 14353 - 14345 - 14170 ,
                                                
- 14159 - 14151 - 14149 - 14145 - 14140 - 14137 - 14135 - 14125 - 14123 - 14122 - 14112 - 14109 - 14099 - 14097 - 14094 ,
                                                
- 14092 - 14090 - 14087 - 14083 - 13917 - 13914 - 13910 - 13907 - 13906 - 13905 - 13896 - 13894 - 13878 - 13870 - 13859 ,
                                                
- 13847 - 13831 - 13658 - 13611 - 13601 - 13406 - 13404 - 13400 - 13398 - 13395 - 13391 - 13387 - 13383 - 13367 - 13359 ,
                                                
- 13356 - 13343 - 13340 - 13329 - 13326 - 13318 - 13147 - 13138 - 13120 - 13107 - 13096 - 13095 - 13091 - 13076 - 13068 ,
                                                
- 13063 - 13060 - 12888 - 12875 - 12871 - 12860 - 12858 - 12852 - 12849 - 12838 - 12831 - 12829 - 12812 - 12802 - 12607 ,
                                                
- 12597 - 12594 - 12585 - 12556 - 12359 - 12346 - 12320 - 12300 - 12120 - 12099 - 12089 - 12074 - 12067 - 12058 - 12039 ,
                                                
- 11867 - 11861 - 11847 - 11831 - 11798 - 11781 - 11604 - 11589 - 11536 - 11358 - 11340 - 11339 - 11324 - 11303 - 11097 ,
                                                
- 11077 - 11067 - 11055 - 11052 - 11045 - 11041 - 11038 - 11024 - 11020 - 11019 - 11018 - 11014 - 10838 - 10832 - 10815 ,
                                                
- 10800 - 10790 - 10780 - 10764 - 10587 - 10544 - 10533 - 10519 - 10331 - 10329 - 10328 - 10322 - 10315 - 10309 - 10307 ,
                                                
- 10296 - 10281 - 10274 - 10270 - 10262 - 10260 - 10256 - 10254  };

        
///   <summary>
        
///  包含汉字拼音的字符串数组。
        
///   </summary>
         private   static   string [] ps  =   new   string [] {  " a " " ai " " an " " ang " " ao " " ba " " bai " " ban " " bang " " bao " " bei " ,
                                                      
" ben " " beng " " bi " " bian " " biao " " bie " " bin " " bing " " bo " " bu " " ca " " cai " " can " " cang " " cao " " ce " " ceng " ,
                                                      
" cha " " chai " " chan " " chang " " chao " " che " " chen " " cheng " " chi " " chong " " chou " " chu " " chuai " " chuan " " chuang " ,
                                                      
" chui " " chun " " chuo " " ci " " cong " " cou " " cu " " cuan " " cui " " cun " " cuo " " da " " dai " " dan " " dang " " dao " " de " ,
                                                      
" deng " " di " " dian " " diao " " die " " ding " " diu " " dong " " dou " " du " " duan " " dui " " dun " " duo " " e " " en " " er " ,
                                                      
" fa " " fan " " fang " " fei " " fen " " feng " " fo " " fou " " fu " " ga " " gai " " gan " " gang " " gao " " ge " " gei " " gen " " geng " ,
                                                      
" gong " " gou " " gu " " gua " " guai " " guan " " guang " " gui " " gun " " guo " " ha " " hai " " han " " hang " " hao " " he " " hei " ,
                                                      
" hen " " heng " " hong " " hou " " hu " " hua " " huai " " huan " " huang " " hui " " hun " " huo " " ji " " jia " " jian " " jiang " " jiao " ,
                                                      
" jie " " jin " " jing " " jiong " " jiu " " ju " " juan " " jue " " jun " " ka " " kai " " kan " " kang " " kao " ,
                                                      
" ke " " ken " " keng " " kong " " kou " " ku " " kua " " kuai " " kuan " " kuang " " kui " " kun " " kuo " " la " " lai " " lan " " lang " " lao " " le " " lei " " leng " " li " " lia " " lian " " liang " " liao " " lie " " lin " " ling " " liu " " long " " lou " " lu " " lv " " luan " " lue " " lun " " luo " " ma " " mai " " man " " mang " " mao " " me " " mei " " men " " meng " " mi " " mian " " miao " " mie " " min " " ming " " miu " " mo " " mou " " mu " " na " " nai " " nan " " nang " " nao " " ne " " nei " " nen " " neng " " ni " " nian " " niang " " niao " " nie " " nin " " ning " " niu " " nong " " nu " " nv " " nuan " " nue " " nuo " " o " " ou " " pa " " pai " " pan " " pang " " pao " " pei " " pen " " peng " " pi " " pian " " piao " " pie " " pin " " ping " " po " " pu " " qi " " qia " " qian " " qiang " " qiao " " qie " " qin " " qing " " qiong " " qiu " " qu " " quan " " que " " qun " " ran " " rang " " rao " " re " " ren " " reng " " ri " " rong " " rou " " ru " " ruan " " rui " " run " " ruo " " sa " " sai " " san " " sang " " sao " " se " " sen " " seng " " sha " " shai " " shan " " shang " " shao " " she " " shen " " sheng " " shi " " shou " " shu " " shua " " shuai " " shuan " " shuang " " shui " " shun " " shuo " " si " " song " " sou " " su " " suan " " sui " " sun " " suo " " ta " " tai " " tan " " tang " " tao " " te " " teng " " ti " " tian " " tiao " " tie " " ting " " tong " " tou " " tu " " tuan " " tui " " tun " " tuo " " wa " " wai " " wan " " wang " " wei " " wen " " weng " " wo " " wu " " xi " " xia " " xian " " xiang " " xiao " " xie " " xin " " xing " " xiong " " xiu " " xu " " xuan " " xue " " xun " " ya " " yan " " yang " " yao " " ye " " yi " " yin " " ying " " yo " " yong " " you " " yu " " yuan " " yue " " yun " " za " " zai " " zan " " zang " " zao " " ze " " zei " " zen " " zeng " " zha " " zhai " " zhan " " zhang " " zhao " " zhe " " zhen " " zheng " " zhi " " zhong " " zhou " " zhu " " zhua " " zhuai " " zhuan " " zhuang " " zhui " " zhun " " zhuo " " zi " " zong " " zou " " zu " " zuan " " zui " " zun " " zuo "  };

        
///   <summary>
        
///  包含要排除处理的字符的字符串数组。
        
///   </summary>
         private   static   string [] bd  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "  };

        
private   static  Hashtable _Phrase;

        
///   <summary>
        
///  设置或获取包含列外词组读音的键/值对的组合。
        
///   </summary>
         public   static  Hashtable Phrase {
            
get  {
                
if  (_Phrase  ==   null ) {
                    _Phrase 
=   new  Hashtable();

                    _Phrase.Add(
" 重庆 " " Chong Qing " );
                    _Phrase.Add(
" 深圳 " " Shen Zhen " );
                    _Phrase.Add(
" 什么 " " Shen Me " );
                }

                
return  _Phrase;
            }

            
set  { _Phrase  =  value; }
        }

        
///   <summary>
        
///  将指定中文字符串转换为拼音形式。
        
///   </summary>
        
///   <param name="chs"> 要转换的中文字符串。 </param>
        
///   <param name="separator"> 连接拼音之间的分隔符。 </param>
        
///   <param name="initialCap"> 指定是否将首字母大写。 </param>
        
///   <returns> 包含中文字符串的拼音的字符串。 </returns>
         public   static   string  Convert( string  chs,  string  separator,  bool  initialCap) {
            
if  (chs  ==   null   ||  chs.Length  ==   0 return   "" ;
            
if  (separator  ==   null   ||  separator.Length  ==   0 ) separator  =   "" ;

            
//  例外词组
             foreach  (DictionaryEntry de  in  CHS2PinYin.Phrase) {
                chs 
=  chs.Replace(de.Key.ToString(), String.Format( "  {0}  " , de.Value.ToString().Replace( "   " , separator)));
            }

            
// 先对字符做全角转半角
            chs  =  ToDBC(chs);
            chs 
=  Microsoft.VisualBasic.Strings.StrConv(chs, Microsoft.VisualBasic.VbStrConv.SimplifiedChinese,  0 );

            
byte [] array  =   new   byte [ 2 ];
            
string  returnstr  =   "" ;
            
int  chrasc  =   0 ;
            
int  i1  =   0 ;
            
int  i2  =   0 ;
            
bool  b  =   false ;
            
char [] nowchar  =  chs.ToCharArray();

            CultureInfo ci 
=  Thread.CurrentThread.CurrentCulture;
            TextInfo ti 
=  ci.TextInfo;

            
for  ( int  j  =   0 ; j  <  nowchar.Length; j ++ ) {
                array 
=  Encoding.Default.GetBytes(nowchar[j].ToString());
                
string  s  =  nowchar[j].ToString(); ;

                
if  (array.Length  ==   1 ) {
                    b 
=   true ;
                    returnstr 
+=  s;
                }
                
else  {
                    
if  (s  ==   " " ) {
                        
if  (returnstr  ==   ""   ||  b  ==   true ) returnstr  +=  s;
                        
else  returnstr  +=  separator  +  s;

                        
continue ;
                    }

                    i1 
=  ( short )(array[ 0 ]);
                    i2 
=  ( short )(array[ 1 ]);

                    chrasc 
=  i1  *   256   +  i2  -   65536 ;

                    
for  ( int  i  =  (pv.Length  -   1 ); i  >=   0 ; i -- ) {
                        
if  (pv[i]  <=  chrasc) {
                            s 
=  ps[i];

                            
if  (initialCap  ==   true ) s  =  ti.ToTitleCase(s);

                            
if  (returnstr  ==   ""   ||  b  ==   true ) returnstr  +=  s;
                            
else  returnstr  +=  separator  +  s;

                            
break ;
                        }
                    }

                    b 
=   false ;
                }
            }

            returnstr 
=  returnstr.Replace( "   " , separator);
            
return  returnstr;
        }

        
///   <summary>
        
///  将指定中文字符串转换为拼音形式。
        
///   </summary>
        
///   <param name="chs"> 要转换的中文字符串。 </param>
        
///   <param name="separator"> 连接拼音之间的分隔符。 </param>
        
///   <returns> 包含中文字符串的拼音的字符串。 </returns>
         public   static   string  Convert( string  chs,  string  separator) {
            
return  CHS2PinYin.Convert(chs, separator,  false );
        }

        
///   <summary>
        
///  将指定中文字符串转换为拼音形式。
        
///   </summary>
        
///   <param name="chs"> 要转换的中文字符串。 </param>
        
///   <param name="initialCap"> 指定是否将首字母大写。 </param>
        
///   <returns> 包含中文字符串的拼音的字符串。 </returns>
         public   static   string  Convert( string  chs,  bool  initialCap) {
            
return  CHS2PinYin.Convert(chs,  "" , initialCap);
        }

        
///   <summary>
        
///  将指定中文字符串转换为拼音形式。
        
///   </summary>
        
///   <param name="chs"> 要转换的中文字符串。 </param>
        
///   <returns> 包含中文字符串的拼音的字符串。 </returns>
         public   static   string  Convert( string  chs) {
            
return  CHS2PinYin.Convert(chs,  "" );
        }

        
///   <summary>
        
///  转全角的函数(SBC case)
        
///   </summary>
        
///   <param name="input"> 任意字符串 </param>
        
///   <returns> 全角字符串 </returns>
        
/// <remarks>
        
/// 全角空格为12288,半角空格为32
        
/// 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        
/// </remarks>         
         public   static   string  ToSBC( string  input) {
            
// 半角转全角:
             char [] c  =  input.ToCharArray();
            
for  ( int  i  =   0 ; i  <  c.Length; i ++ ) {
                
if  (c[i]  ==   32 ) {
                    c[i] 
=  ( char ) 12288 ;
                    
continue ;
                }
                
if  (c[i]  <   127 )
                    c[i] 
=  ( char )(c[i]  +   65248 );
            }
            
return   new   string (c);
        }


        
///   <summary>
        
///  转半角的函数(DBC case)
        
///   </summary>
        
///   <param name="input"> 任意字符串 </param>
        
///   <returns> 半角字符串 </returns>
        
/// <remarks>
        
/// 全角空格为12288,半角空格为32
        
/// 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
        
/// </remarks>
         public   static   string  ToDBC( string  input) {
            
char [] c  =  input.ToCharArray();
            
for  ( int  i  =   0 ; i  <  c.Length; i ++ ) {
                
if  (c[i]  ==   12288 ) {
                    c[i] 
=  ( char ) 32 ;
                    
continue ;
                }
                
if  (c[i]  >   65280   &&  c[i]  <   65375 )
                    c[i] 
=  ( char )(c[i]  -   65248 );
            }
            
return   new   string (c);
        }

        
///     <summary>  
        
///    转换为简体中文 
        
///     </summary>  
         public   static   string  ToSChinese( string  str) {
            
return  Strings.StrConv(str, VbStrConv.SimplifiedChinese,  0 );
        }

        
///     <summary>  
        
///    转换为繁体中文 
        
///     </summary>  
         public   static   string  ToTChinese( string  str) {
            
return  Strings.StrConv(str, VbStrConv.TraditionalChinese,  0 );
        }
    }
}

 

 

转载于:https://www.cnblogs.com/luqingfei/archive/2011/01/17/1937058.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值