如何在canvas上顯示utf8 |
尚未結案
|
d8463200
一般會員 發表:1 回覆:3 積分:0 註冊:2004-04-16 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
|
yorkland
高階會員 發表:2 回覆:138 積分:108 註冊:2004-12-17 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
引言: utf8 是什麼? 如果是WideString Delphi有提供像StringToWideChart 或 WideChartToString的功能, 是不是先轉換格式後就能顯示了?UTF8 是 Unicode 的一種表達型式 另外,VCL 自己就會去做 String 跟 WideString 的轉換動作了 我們自己其實是不需要去操心的 不論你是用中文還是英文,WideString 還是 String Canvas 都是可以畫出來的 只是說,如果你的 WideString 裡頭有日文假名/漢字甚至是韓文 也就是不屬於繁體中文字集的,也就印不出來了.... PS: 本來想建議用 TntImage 畫的... 沒想到,TntImage 也不支援... |
carsin
一般會員 發表:1 回覆:3 積分:5 註冊:2004-04-17 發送簡訊給我 |
|
d8463200
一般會員 發表:1 回覆:3 積分:0 註冊:2004-04-16 發送簡訊給我 |
首先謝謝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 發送簡訊給我 |
引言: 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |