[.NET]將unicode的字轉成big5編碼的HTML可顯示出來

[.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());

image

參考資料

Full HTML Character Encoding in C#

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^