簡繁體的轉換問題

foxfab 2007-08-03 09:19:31
由于我們公司使用的是繁體資料庫,為了避免簡體字在寫入繁體資料庫時候會出現亂碼,我使用以下方法對SQL進行轉換。
string sql= Microsoft.VisualBasic.Strings.StrConv(sql, VbStrConv.TraditionalChinese, 0);
一直以來都沒問題。可是最近不行了,怎么轉化都是亂碼,百思不得其解,忘大家救命,還會有其他問題影響到嗎?
...全文
334 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Me866 2008-08-21
  • 打赏
  • 举报
回复
...
foxfab 2007-08-06
  • 打赏
  • 举报
回复
我知道問題的所在,我使用的方法本身并沒有問題,問題在于后面參數的選擇上面!
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

foxfab 2007-08-03
  • 打赏
  • 举报
回复
我強制轉化成UTF-8都還不行,上邊那個朋友(zzultc(gery) )的方式我原來就有試過,也還是不行,主要不知道為什么會轉換一部分,先前我做的一個網站,同樣的架構都是可以的,真的很神奇,呵呵,能力有限,非常謝謝大家幫忙
ll124993513 2007-08-03
  • 打赏
  • 举报
回复
那把 整个页面的简体中文转换成英文,用一个Button来实现这个功能应该怎么做呢
foxfab 2007-08-03
  • 打赏
  • 举报
回复
那個方法還是有轉換的,只是轉換不完全,不知道為什么會這個樣子,比如說我轉換以下簡體字:
“新浪体育讯 2007银河娱乐斯坦科维奇洲际篮球杯落幕,斯洛文尼亚在最后一场比赛中78-51力克非洲冠军安哥拉,最终以4胜1负积9分的战绩勇夺冠军。

轉換以后如下:
“新浪體育? 2007?河??斯坦科?奇洲??球杯落幕,斯洛文尼?在最后一?比?中78-51力克非洲冠?安哥拉,最?以4勝1??9分的??勇?冠?。”
cherishLot 2007-08-03
  • 打赏
  • 举报
回复
呵呵^
zzultc 2007-08-03
  • 打赏
  • 举报
回复
繁体字编码应该是big5编码的,这里假设原来简体字符串为gbstring,转换后为kk;代码如下:
string kk=Encoding.GetEncoding("big5").GetString(Encoding.Convert(Encoding.GetEncoding("gb2312"),Encoding.GetEncoding("big5"),Encoding.GetEncoding("bg2312").GetBytes(gbstring)));

呵呵,没想到这一行竟然这么长!!
楼主看仔细了!
godgreat 2007-08-03
  • 打赏
  • 举报
回复
沙发,帮忙顶
XuFrank 2007-08-03
  • 打赏
  • 举报
回复
前台不需要做任何转换.

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

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

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

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧