線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2045
推到 Plurk!
推到 Facebook!

關於 unicode 轉 big5 錯誤後的處理

答題得分者是:Coffee
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-08 02:18:27 IP:211.76.xxx.xxx 訂閱
請問在 BCB 中當我由 excel 讀取到 unicode 的字串之後,
我想用 big5 碼,加上一些處理後另外存成文字檔。

前面這些都有資料可查,但我發現 unicode 的字比 big5 多,
所以,會發生轉換後的 big5碼字串有時候中間會出現一個轉換失敗的 '?' 字元
現在我想取得這個會轉失敗的字,以方便另外去造字...

但我不知要如何去分割出這個不能轉成 big5碼的 unicode 字....
有人知道怎樣做嗎?
------
無所不在
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-08 09:51:59 IP:219.87.xxx.xxx 未訂閱
如果對應查詢結果是 ?  
就改查你自己建立的對應表去查
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-08 11:18:01 IP:220.130.xxx.xxx 未訂閱
轉出來的值如果無法map就會變成?..所以值應該會跟著被改為single byte,這時候應該可以嘗試的去測試它的ByteType是不是一個有效字元,或它的值是不是與原本Unicode上的值一樣
我看TntWare的Source似乎也是這樣寫的 ..
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
jtain
一般會員


發表:16
回覆:18
積分:6
註冊:2005-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-08 22:15:58 IP:211.76.xxx.xxx 訂閱
因為原始資料裡就有可能是中英文混雜,而那個 '?' 也有出現過........
所以,沒有辦法用 1 byte 或 2 bytes 來辨識,
而且就算能找到轉換後的 big5 碼字串裏的錯誤,要怎樣去找到對應的 unicode 字元
我主要就是在問這個......
有沒有辦法把 unicode 字串一個字一個字的抓出來轉換?
------
無所不在
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-09 00:12:55 IP:203.73.xxx.xxx 未訂閱
我想你可去考慮一個方向,就是既然會被轉成?,那麼就可以這麼想
如果WideChar本身是個問號,那轉到AnsiChar也一定是?
可是若WideChar檢查不是?的值,轉到AnsiChar是? 那就意謂轉換失敗
我所謂的ByteType是一個function,它可以檢查這個byte是一個byte value還是一個double byte的第一個byte
以下是從TntWare中co出來的function,但我沒有測試它是否對於你的方向可行
我只是在轉Ansi到WideString中有去大致上的翻過TntWare的libs

function IsWideCharMappableToAnsi(const WC: WideChar): Boolean;
var
UsedDefaultChar: BOOL;
begin
WideCharToMultiByte(DefaultSystemCodePage, 0, PWideChar(@WC), 1, nil, 0, nil, @UsedDefaultChar);
Result := not UsedDefaultChar;
end;

function IsWideStringMappableToAnsi(const WS: WideString): Boolean;
var
UsedDefaultChar: BOOL;
begin
WideCharToMultiByte(DefaultSystemCodePage, 0, PWideChar(WS), Length(WS), nil, 0, nil, @UsedDefaultChar);
Result := not UsedDefaultChar;
end;
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
系統時間:2024-05-07 3:23:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!