簡繁體數據庫轉換問題(100分)

  • 主题发起人 主题发起人 大忙人
  • 开始时间 开始时间

大忙人

Unregistered / Unconfirmed
GUEST, unregistred user!
最近我們公司需要用Delphi做一個可以對簡繁體數據庫數據轉換的程序。我的做法是先將資料轉為Unicode,然後再用LCMapStringW這個API函數進行簡繁體轉換。然而在簡體環境下可以沒有任何困撓。然在繁體環境下,在讀取簡體數據庫下類型為varchar時,不管怎麼處理,卻總是有“?”這樣的字符出現。我後來也想過用SetLocaleInfo先列改區域語言設置,再進行轉換,但也沒有成功。想問一下,在這裡的名位朋友們,有沒有這方面的經驗,提供一下方法。
 
一直沒有人來幫忙解決此問題,所以,如有能幫忙解決者,將再送100分。
 
我也遇過同樣的問題,你能再詳細的說一些你的要求嗎?
 
我的要求就是用Delphi寫一個程序,能夠將數據從簡體數據庫中轉到繁體數據庫,也能夠將繁體數據庫的數據轉到簡體數據庫中,而且這個程序要能夠在簡繁體數系統中使用。目前我所解決的,在簡體系統中使用是沒有任何問題,就是在繁體系統中,將數據從簡繁數據庫中轉到繁體數據庫中,總是有“?”出現。
 
我用的是三層的,界面處理用LCMapStringW<br>數據用以下方式<br> &nbsp;with dataset do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;while not eof do<br> &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for i:=0 to fieldcount-1 do<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if fields.DataType=ftstring then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;edit;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fields.asstring:=Big52GB(fields.asstring);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if state in [dsedit] then post;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;next;<br> &nbsp; &nbsp; &nbsp; &nbsp;end;
 
在ongetdata時使用
 
在clientdataset在ongetdata時使用
 
用LCMapStringW和LCMapString,我都試過,但在繁體系統下,還是不行。這樣子交流太不方便,改個方式吧!<br>我的e_mail是zhukai10@163.com,我的QQ是:39120236
 
这个问题应该顶,见了好多个繁简转换的例子,但没有认真测试过<br>请有经验的人出来讲讲啊!
 
應為繁體字庫沒有簡體字,而簡體字庫包含繁體字,所以這個問題沒有辦法,說delphi2006支持unicode了,你可以試試,前面的版本就不要浪費時間了
 
有API函數嗎?
 
帮顶!<br><br>-------------------------------------<br>站长开发推广同盟 &nbsp;关注网站,关注技术!<br><br>海量源代码下载,二次开发绝佳站点<br><br>网址: http://www.source520.com<br> &nbsp; &nbsp; &nbsp;http://www.source520.net
 
同意 boldfake!
 
boldfake說的應該是對的,其實在繁體的windows裡面有時候也會出現這樣的問題,比如mail等.<br>建議統一台灣,全部改為簡體字,呵呵..
 
用論壇里的gbtobig5和big5togb試過轉換的問題﹐<br>中文轉為簡體存到IC卡上﹐卡鐘只能識別簡體﹔<br>讀卡時簡體換為繁體﹐正常。<br>我用的是繁體系統。<br>僅供參考。
 
建议你把类型改下,<br>varchar--&gt;nvarchar
 
这个肯定行。<br>function TForm1.GBCht2Chs(GBStr : String): AnsiString; &nbsp; //进行GBK繁体转简体<br>var<br> &nbsp; Len: Integer;<br> &nbsp; pGBCHTChar: PChar;<br> &nbsp; pGBCHSChar: PChar;<br>begin<br> &nbsp; pGBCHTChar := PChar(GBStr);<br> &nbsp; Len := MultiByteToWideChar(936,0,pGBCHTChar,-1,nil,0);<br> &nbsp; GetMem(pGBCHSChar,Len*2+1);<br> &nbsp; ZeroMemory(pGBCHSChar,Len*2+1);<br> &nbsp; //GB CHS -&gt; GB CHT<br> &nbsp; LCMapString($804,LCMAP_SIMPLIFIED_CHINESE,pGBCHTChar,-1,pGBCHSChar,Len*2);<br> &nbsp; Result := String(pGBChsChar);<br> &nbsp; //FreeMem(pGBCHTChar);<br> &nbsp; FreeMem(pGBCHSChar);<br>end;<br><br>function TForm1.GBChs2Cht(GBStr : String): AnsiString; &nbsp; &nbsp;{进行GBK简体转繁体}<br>var<br> &nbsp; Len: Integer;<br> &nbsp; pGBCHTChar: PChar;<br> &nbsp; pGBCHSChar: PChar;<br>begin<br> &nbsp; pGBCHSChar := PChar(GBStr);<br> &nbsp; Len := MultiByteToWideChar(936,0,pGBCHSChar,-1,nil,0);<br> &nbsp; GetMem(pGBCHTChar,Len*2+1);<br> &nbsp; ZeroMemory(pGBCHTChar,Len*2+1);<br> &nbsp; //GB CHS -&gt; GB CHT<br> &nbsp; LCMapString($804,LCMAP_TRADITIONAL_CHINESE,pGBCHSChar,-1,pGBCHTChar,Len*2);<br> &nbsp; Result := String(pGBCHTChar);<br> &nbsp; FreeMem(pGBCHTChar);<br> &nbsp; //FreeMem(pGBCHSChar);<br>end;
 
可以通过这个网址建立自己的网站,空间40兆,可以申请永久免费,可以把自己的简历等挂到网站上,<br>还可以进行小小的网赚。<br>http://www.2008red.com/red_work/workregister.php?id=168166<br>网站介绍、详细介绍、联系方式都会在左部显示<br>网站头部:您的Logo<br>栏目图文:您网站首页的各个栏目,栏目下可建立条目<br>公告添加:网站右部栏目<br>我的网站:http://wangchunxing.2008red.com
 
这个问题我也碰到过,如果你是用Delphi 5。。7 的话可以用TNT控件然后将String转换成UTF8 ,取出来再转回来即可
 
后退
顶部