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

如何在canvas上顯示utf8

尚未結案
d8463200
一般會員


發表:1
回覆:3
積分:0
註冊:2004-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-10 19:25:45 IP:202.145.xxx.xxx 未訂閱
請教各位先進 在canvas上如果要顯示utf8是否會有問題?? 小妹我要將資料整理到canvas上再將它印出 但是canvas就是無法顯示 像其它的元件還可以套用tntunicodecontrol解決 有沒有比較好的方式可以建議一下 謝謝.
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-11 09:38:00 IP:60.248.xxx.xxx 未訂閱
改用 Windows API,假設 buf 是個 WideString 我以顯示在 Form 上為例 EX: TextOutW(Form1.Canvas.Handle, X, Y, PWChar(buf), Length(buf));
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-11 14:29:47 IP:220.130.xxx.xxx 未訂閱
utf8 是什麼? 如果是WideString Delphi有提供像StringToWideChart 或 WideChartToString的功能, 是不是先轉換格式後就能顯示了?
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-14 09:37:32 IP:60.248.xxx.xxx 未訂閱
引言: utf8 是什麼? 如果是WideString Delphi有提供像StringToWideChart 或 WideChartToString的功能, 是不是先轉換格式後就能顯示了?
UTF8 是 Unicode 的一種表達型式 另外,VCL 自己就會去做 String 跟 WideString 的轉換動作了 我們自己其實是不需要去操心的 不論你是用中文還是英文,WideString 還是 String Canvas 都是可以畫出來的 只是說,如果你的 WideString 裡頭有日文假名/漢字甚至是韓文 也就是不屬於繁體中文字集的,也就印不出來了.... PS: 本來想建議用 TntImage 畫的... 沒想到,TntImage 也不支援...
carsin
一般會員


發表:1
回覆:3
積分:5
註冊:2004-04-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-15 01:43:50 IP:218.162.xxx.xxx 未訂閱
我之前也是遇到類似的問題,最後是用Tnt元件、TPrinter、TextOutW(如上面wyndog所說的用法)的方式處理
d8463200
一般會員


發表:1
回覆:3
積分:0
註冊:2004-04-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-15 18:57:03 IP:202.145.xxx.xxx 未訂閱
首先謝謝wyndog的提議 TextOutW(Form1.Canvas.Handle, X, Y, PWChar(buf), Length(buf)); 的確可以正確將utf8編碼文件顯示在canvas上 另外想再請教一下wyndog TntMemo如果load進utf8的文件 且該文件以辨識碼EF BB BF帶頭者 將可正常顯示 但是若load進的文件僅編碼為utf8格式而無辨識碼EF BB BF 則中文會變成亂碼 我將此類文件加上EF BB BF才正常 這又是為什麼呢?? 懇請wyndog賜教
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-16 09:59:49 IP:60.248.xxx.xxx 未訂閱
引言: TntMemo如果load進utf8的文件 且該文件以辨識碼EF BB BF帶頭者 將可正常顯示 但是若load進的文件僅編碼為utf8格式而無辨識碼EF BB BF 則中文會變成亂碼 我將此類文件加上EF BB BF才正常 這又是為什麼呢??
因為程式就是靠這個 EE BB BF 來辨識是否為 UTF8 啊 UTF8 本來就跟 ASCII 是不太一樣的東西 如果沒有辨識碼的話,程式就會當它是 ASCII 資料 那麼,看起來中文當然就變亂碼 加上辨識碼之後,程式就知道要用 UTF8 去解釋它了 我想會有這個疑問,可能是你誤解了編碼格式吧 實際上在傳統非 Unicode 環境中 各國文字是自行採用相容於 ASCII 的方式來定義的 例如: "字" 這個字在我們的 BIG5 中的碼為 A672 但在 Unicode 中卻是 5B57 所以,碼是不同的! 再來就是你會發現,為什麼英文就沒問題呢? 因為在 Unicode 中 < 127 的定義都跟 ASCII 一樣 而,UTF8 的表現型式,就是將這 < 127 的仍用 1 byte 來儲存 而 > 127 的就會用 2 bytes 來儲存 所以說,程式得完全靠辨識碼來識別 你給它的字串,到底是什麼樣的編碼格式 它才能做適當的解碼動作 程式語言可是很辛苦地在幫我們做這些轉碼的動作哦 所以,我們才能夠這麼輕鬆地過日子
d8463200
一般會員


發表:1
回覆:3
積分:0
註冊:2004-04-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-16 10:43:30 IP:202.145.xxx.xxx 未訂閱
真的很謝謝wyndog的幫忙 我的問題已順利解決了 感激不盡~~~
系統時間:2017-12-15 18:03:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!