搜尋此網誌

2010年3月1日 星期一

Silverlight、C#:Unicode轉換

在C#中可使用以下程式碼對字串轉換為Unicode或將Unicode轉換為字元:

Encode

using System.Text;

private string StringToUnicode(string srcText)
{
  string dst = "";
  char[] src = srcText.ToCharArray();
  for (int i = 0; i < src.Length; i++)
  {
   byte[] bytes = Encoding.Unicode.GetBytes(src[i].ToString());
   string str = @"\u" + bytes[1].ToString("X2") + bytes[0].ToString("X2");
   dst += str;
  }
  return dst;
}

Decode

using System.Globalization;

private string UnicodeToString(string srcText)
{
string dst = "";
string src = srcText;
int len = srcText.Length / 6;

for (int i = 0; i <= len - 1; i++)
{
  string str = "";
  str = src.Substring(0, 6).Substring(2);
  src = src.Substring(6);
  byte[] bytes = new byte[2];
  bytes[1] =  
   byte.Parse(int.Parse
    (str.Substring(0,2),NumberStyles.HexNumber).ToString());
  bytes[0] = byte.Parse(int.Parse
    (str.Substring(2,  2),NumberStyles.HexNumber).ToString());
  dst += Encoding.Unicode.GetString(bytes);
  }
  return dst;
}


但上述程式碼中,Decode的部份在Slilverlight會出現「... is inaccessable due to its protection level」的錯誤,請改為以下內容,程式即可正常編譯:
Decode at Silverlight

string UnicodeToString(string srcText)
{
 string dst = "";
 string src = srcText;
 int len = srcText.Length / 6;

 for (int i = 0; i <= len - 1; i++)
 {
  string str = "";
  str = src.Substring(0, 6).Substring(2);
  src = src.Substring(6);
  byte[] bytes = new byte[2];
  bytes[1] = byte.Parse(int.Parse(str.Substring(0, 2),
   NumberStyles.HexNumber).ToString());
  bytes[0] = byte.Parse(int.Parse(str.Substring(2, 2),
   NumberStyles.HexNumber).ToString());

  Encoding enc = Encoding.GetEncoding("utf-16");
  dst += enc.GetString(bytes, 0, bytes.Length);

 }
  return dst;
}

沒有留言:

張貼留言