C# 字符串与unicode互相转换实战案例
我就废话不多说了,大家还是直接看代码吧~
//////字符串转Unicode /// ///源字符串 /// Unicode编码后的字符串 publicstaticstringString2Unicode(stringsource) { varbytes=Encoding.Unicode.GetBytes(source); varstringBuilder=newStringBuilder(); for(vari=0;i///字符串转为UniCode码字符串 /// /// /// publicstaticstringStringToUnicode(strings) { char[]charbuffers=s.ToCharArray(); byte[]buffer; StringBuildersb=newStringBuilder(); for(inti=0;i ///Unicode字符串转为正常字符串 /// /// /// publicstaticstringUnicodeToString(stringsrcText) { stringdst=""; stringsrc=srcText; intlen=srcText.Length/6; for(inti=0;i<=len-1;i++) { stringstr=""; str=src.Substring(0,6).Substring(2); src=src.Substring(6); byte[]bytes=newbyte[2]; bytes[1]=byte.Parse(int.Parse(str.Substring(0,2),System.Globalization.NumberStyles.HexNumber).ToString()); bytes[0]=byte.Parse(int.Parse(str.Substring(2,2),System.Globalization.NumberStyles.HexNumber).ToString()); dst+=Encoding.Unicode.GetString(bytes); } returndst; }
补充:C#unicodestring转换codepoint
C#的string和StringBuilder都支持使用codepoint直接构造字符串。unicode的字符串形式一般都是'\u1234'这种转义模式。其中‘1234'就是unicodecodepoint的16进制形式。
通过计算,可以把这种形式的字符串,直接转化为int32类型的codepoint。
//////Gettheunicodecodepoint /// privatestaticintGetUnicodeCodePoint(charc1,charc2,charc3,charc4) { returnUnicodeCharToInt(c1)*0x1000+ UnicodeCharToInt(c2)*0x100+ UnicodeCharToInt(c3)*0x10+ UnicodeCharToInt(c4); } //////Singleunicodecharconverttoint /// privatestaticintUnicodeCharToInt(charc) { switch(c) { case'0': case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': case'9': returnc-'0'; case'a': case'b': case'c': case'd': case'e': case'f': returnc-'a'+10; case'A': case'B': case'C': case'D': case'E': case'F': returnc-'A'+10; } thrownewException(string.Format("Unicodechar'{0}'error",c)); }
使用的时候codepoint需要强转为char类型。比如:
StringBuildersb=newStringBuilder(); sb.Append((char)GetUnicodeCodePoint(c1,c2,c3,c4));
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。