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

如何將UTF8轉Big5

答題得分者是:aftcast
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-03-27 07:42:42 IP:76.245.xxx.xxx 訂閱
我透過Indy TIdHTTP Get網頁資料,取得的資料包含中英文數字夾雜,其中中文應該為UTF8 (我不太確定,格式如\u611b)

我使用bcb 2010的ShowMessage("愛")可正常show出"愛"這個中文字

但是我卻沒辦法透過Utf8Decode或Utf8ToAnsi轉成中文字,搜尋了一整晚,似乎用這兩個function就可以直接轉換,但我就是沒辦法轉換

我的作法是:
[code cpp]
AnsiString body = IdHTTP->Get (url);
Memo->Text = Utf8Decode (body); //無法轉換成中文
[/code]

請問是該格式並非utf8還是需要哪些動作才可轉換?

謝謝
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-03-27 19:50:47 IP:59.126.xxx.xxx 訂閱
HI, 請問一下,有相關的網頁可提供借測嗎? 目前小弟用 Delphi 2010 的去讀幾個網頁都還正常,所以也許沒碰到您說的頁面。
------
價值的展現,來自於你用哪一個角度來看待它!!
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-03-28 01:17:33 IP:76.245.xxx.xxx 訂閱
您好,
請問你有plurk嗎?
我是讀取plurk遇到的,他是utf-8格式,只要是中文就會有該問題

[code cpp]
AnsiString body ="愛";
Memo->Text = Utf8Decode (body); //請問您是否可以正常顯示中文
//如果是Memo->Text ("愛")就可以正常顯是

[/code]



===================引 用 careychen 文 章===================
HI, 請問一下,有相關的網頁可提供借測嗎? 目前小弟用 Delphi 2010 的去讀幾個網頁都還正常,所以也許沒碰到您說的頁面。
編輯記錄
GGL 重新編輯於 2010-03-28 01:20:33, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-03-28 18:19:36 IP:220.135.xxx.xxx 訂閱
我沒有使用2010版。但,愛這個字的
utf8 是 E6849B

AnsiString body ="\xE6\x84\x9B"; 試看看

611B 是unicode (ucs2) ,它與utf8 是完全不同的。


------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-03-28 22:37:57 IP:76.245.xxx.xxx 訂閱
該不會重頭到尾他都不是utf8吧,但是網頁瀏覽怎麼會是utf8,我在其他討論區看,plurk傳輸也是utf8

===================引 用 aftcast 文 章===================
我沒有使用2010版。但,愛這個字的
utf8 是 E6849B

AnsiString body ="\xE6\x84\x9B"; 試看看

611B 是unicode (ucs2) ,它與utf8 是完全不同的。


aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-03-29 01:03:10 IP:220.135.xxx.xxx 訂閱
plurk 應該是utf8沒錯。但是否indy get 後傳回的是否已經不是utf8?  2010上的indy我沒使用過。但看來你需要自己去debug,或者把indy上的help看仔細一點,看是否某些方法已經自動的會把utf8轉成unicode?

不過照你開始說明你的,你說你看到的 \u???? 那個字的確就是unicode沒錯。而utf8這總編碼是不固定長度的,1byte至3、4bytes(最多幾bytes我忘了),但中文一般是3bytes較多。而unicode是固定在2bytes(精準一點講是ucs2)。也是windows核心上的編碼。
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-03-29 03:43:24 IP:76.245.xxx.xxx 訂閱
謝謝您的回覆,

我也是看到plurk是UTF8加上取得的編碼上有\uxxx所以我直接認為這個u是utf8的u

完全沒想到他會是unicode

我在查資料的時候有看到一般utf-8好像是2~3byte(中文),所以我當時有覺得跟我取得的資料有點不太符合,畢竟如果可變長度,我怎麼知道他是試用幾byte

第一次碰到UTF8 OR UNICODE就被搞得一個頭兩個大

總之感謝了,等等再研究看看

===================引 用 aftcast 文 章===================
plurk 應該是utf8沒錯。但是否indy get 後傳回的是否已經不是utf8? 2010上的indy我沒使用過。但看來你需要自己去debug,或者把indy上的help看仔細一點,看是否某些方法已經自動的會把utf8轉成unicode?

不過照你開始說明你的,你說你看到的 \u???? 那個字的確就是unicode沒錯。而utf8這總編碼是不固定長度的,1byte至3、4bytes(最多幾bytes我忘了),但中文一般是3bytes較多。而unicode是固定在2bytes(精準一點講是ucs2)。也是windows核心上的編碼。
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-03-29 03:46:04 IP:76.245.xxx.xxx 訂閱
我當時本來也想看help,但是令人無奈的是...2010的indy help竟然是找不到網頁,很無言

他是連到ms-help://embarcadero.rs2010/Indy/index.html

我在懷疑是不是掛點了
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-03-29 07:15:30 IP:69.110.xxx.xxx 訂閱
http://www.fileformat.info/info/unicode/char/611b/index.htm

找到這個網站,讓我確定怎麼更改我的程式

果然是unicode,最後我一個一個分析,找出\u的位置,每個字都轉成big-5

終於搞定了

感謝
系統時間:2017-12-16 20:52:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!