全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4414
推到 Plurk!
推到 Facebook!

請問怎樣可以把 string to UTF-8

尚未結案
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-04 17:55:09 IP:218.103.xxx.xxx 未訂閱
因為案子須要到UTF-8 跟 unicode  所以就在KTop爬了很多關於unicode的文章 但已經爬很多, 越看越亂    請問有大大用過  http://www.yunqa.de/delphi/converters/index.htm 的 DIconvetors 嗎? 下面的是我試用他的api 做的
     procedure convert();
var
   temp : ucs4_t;
   conv : conv_struct;
   returncode : integer;
   b : array of byte;
begin
     fillchar(conv,sizeof(conv),0);
     setlength(b,10);
     b[0] := $A7; // A7 DA => big5 '我'
     b[1] := &DA;
     returncode = big5_mbtowc(@conv,temp,b,2); 
end;
這樣出來的unicode 結果是對的 , 但我有很多地方不太明白, 在紅色的那句上,如果我把 2 改成 sizeof(b) = 4 為什麼呢? 不是2 bytes嗎? 但話說回來, 就算我把2改成 sizeof(b), answer 一樣都是對,那又為什麼呢? 我真正想要做的是 以一個 Tedit 給user type 一些string , 可能是中文或者是英文, 然後是要把那個string 變成 UTF-8 . 第一個問題是我要怎樣知道現在user type in 的時候是以什麼code page 呢? 是以system 去找嗎? 但code page 好像是application dependent. 謝謝 可能不是最好的方法 !!! 我也是初學者 !!! 不要怪我呀.. 我最喜歡吃零食啦^.^
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-04 18:17:27 IP:203.69.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=77434 用這套 unicode 元件試試看 http://www.tntware.com/delphicontrols/unicode/ Free, with source code... Delphi 7 本身就提供 UTF8Decode, UTF8Encode 兩支函數了...
T.J.K
中階會員


發表:3
回覆:35
積分:57
註冊:2005-06-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-04 18:31:52 IP:211.78.xxx.xxx 未訂閱
SamSam1230 您好: D7有提供 UTF8String   
 
function ASToUtf8(const Str: string): UTF8String;
begin  
  Result := Utf8Encode(Str);
end;
kTOP裡我是一粒沙
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-05 09:40:12 IP:218.103.xxx.xxx 未訂閱
謝謝 malanlk , T.J.K 的提供 很不幸 , 我是用D4 的... 另外tntware 的我也看過, 它最低也是到 D5 可能不是最好的方法 !!! 我也是初學者 !!! 不要怪我呀.. 我最喜歡吃零食啦^.^
SamSam1230
中階會員


發表:128
回覆:178
積分:65
註冊:2004-12-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-05 12:37:39 IP:218.103.xxx.xxx 未訂閱
 procedure TFrmMain.BitBtn2Click(Sender: TObject);
var
   conv: conv_struct;
   returncode,i : integer;
   tmpucs : ucs4_t;
   outputstr1,outputstr2   : array of char;       wideChars   : array [0..11] of WideChar;
   wideChars1  : array of WideChar;
   myString    : String;
begin
     FillChar(conv,Sizeof(conv),0);
     setlength(outputstr1,255);
     setlength(wideChars1,12);
     stringtowidechar(edit1.text,@widechars,12); 
     stringtowidechar(edit1.text,@widechars1,12);         for i := 0 to length(widechars)-1 do
     begin
          returncode := utf8_wctomb(@conv,outputstr1,ord(widechars[i]),3);
     end;
     outputstr2 := copy(outputstr1,0,length(outputstr1)-1);
end;
以上的問題我已經解決了是用了stringtowidechar 和 DIconvertor 的 utf8_wctomb 但有另外一個問題是紅色的部分 假如我edit1.text type in '我們' 為什麼 widechars 顯示的是正確 , 而widechars1 錯呢? 兩個分別是我widechars1 是run time 的時候才setlength , 但是我搞不懂為什麼呢 可能不是最好的方法 !!! 我也是初學者 !!! 不要怪我呀.. 我最喜歡吃零食啦^.^
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-05 14:45:09 IP:147.8.xxx.xxx 未訂閱
wideChars is a static array while wideChars1 is a dynamic array. Try this: stringtowidechar(edit1.text,@widechars1[0],12); http://pywong.hk.st
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-05 14:59:43 IP:203.69.xxx.xxx 未訂閱
try this stringtowidechar(edit1.text,pointer(widechars1),12);
系統時間:2024-07-03 5:01:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!