[.NET]將unicode的字轉成big5編碼的HTML可顯示出來
昨天在查一個將字串傳入一個COM元件,然後產生HTML的組織圖出來的問題!
後來查到因為是VB6寫的元件,沒有考慮Unicode的問題,所以如果傳入「堃」這種unicode字進去,就會發生錯誤!
想到之前網頁使用big5編碼時,如果要顯示unicode時,就要使用 &#數值; ,所以就找到了「Full HTML Character Encoding in C#」,將unicode的字,轉成 &#數值; ,就可以正常呈現了。
比如說,「亂馬客堃」就會轉成「亂馬客堃」。
以下記錄使用function及使用Extension Methods的方式,
//使用function
public static string HtmlEncode(string text)
{
char[] chars = text.ToCharArray();
StringBuilder result = new StringBuilder(text.Length + (int)(text.Length * 0.1));
foreach (char c in chars)
{
int value = Convert.ToInt32(c);
if (value > 127)
result.AppendFormat("&#{0};", value);
else
result.Append(c);
}
return result.ToString();
}
public static string HtmlEncode2(string text)
{
return string.Join("", text.ToCharArray().Select(c => (int)c > 127 ? "&#" + (int)c + ";" : c.ToString()).ToArray());
}
//使用Extension Methods
public static class StringExtend
{
public static string ToHtml(this string str)
{
return string.Join("", str.ToCharArray().Select(c => (int)c > 127 ? "&#" + (int)c + ";" : c.ToString()).ToArray());
}
}
使用方式如下,
//call function
MessageBox.Show(HtmlEncode("亂馬客堃"));
MessageBox.Show(HtmlEncode2("亂馬客堃"));
//use Extension Methods
MessageBox.Show("亂馬客堃".ToHtml());
參考資料
Full HTML Character Encoding in C#
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^