简繁体的转换问题解决办法

1、繁体字编码应该是big5编码的,这里假设原来简体字符串为gbstring,转换后为kk;代码如下:
string kk=Encoding.GetEncoding("big5").GetString(Encoding.Convert(Encoding.GetEncoding("gb2312"),Encoding.GetEncoding("big5"),Encoding.GetEncoding("bg2312").GetBytes(gbstring)));

2、数据表设计时,存汉字的字段,设为nVarChar/nChar/nText类型(依情况选择一种类型).

在插入更新时,在该类型的字段数据前加上 N'你的数据'
eg: 

Insert into Table Values('A1','2007-08-03',N'你的数据')
不管是简繁体,还是日文韩文,还是其它文字,都不会出现乱码了

3、
string sql= Microsoft.VisualBasic.Strings.StrConv(sql, VbStrConv.TraditionalChinese, 1033);
以下是詳細說明:
這個在 dotnet 上,需籍用 Microsort.VisualBasic.dll 的力量了
using Microsoft.VisualBasic;

string str = "中國"; str = Strings.StrConv(str, VbStrConv.SimplifiedChinese, 2052);
MessageBox.Show(str); //簡體的中國
str = Strings.StrConv(str, VbStrConv.TraditionalChinese, 1033);
MessageBox.Show(str); //繁體的中國

請參考 String.StrConv 的 msdn 說明
注意到:
第一個參數是待轉換的字串
第二個參數欲轉換成字體列舉值 (enum)
第三個參數(重要),是文字轉換完後,最後對應的編碼格式 (LocaleID)

1028 繁體中文
1033 ASCII
2052 簡體中文



為何第二次轉換回繁體時,不用 1028 而用 1033 呢?
首先,要先知道,有些簡體中文的編碼值是在繁體中文是對應不到任何字的。此時,顯示的字就會是 "?" 號。
因為 2052 的 「 国] 已經是簡體字了,轉回到繁體時,剛好其編碼對應不到1028 的編碼,因此會是問號。

最好的方法,是以 en-US 做為編碼格式。當以 en-US 做為最後的編碼格式時,又碰到亞洲字時,就會以 unicode 做為儲存編碼格式。此剛好與 dotnet 的 string 儲存格式相同。因此解決了所有問題。

因此,當我們在做簡繁轉換時,請將第三個參數都設成 1033 

你可能感兴趣的:(简繁体的转换问题解决办法)