Unicode 在 Windows & Linux 的資料交換

edited 十月 2013 in 進階PHP討論
最近遇到一個狀況,網站使用 UTF-8 編碼,而一個 DELPHI 7 開發的桌面應用也是使用 Unicode (不確定編碼方式),剛開始兩個使用 Big5 作為資料交換的編碼,但是容易發現人名缺字的問題,所以開始要改用 Unicode ,就開始出現了一些問題。

剛開始是認知的問題,那位開發者認為 Unicode 與 UTF-8 or UTF-16 是不一樣的東西,口頭解釋他不信,只好丟了 Unicode 官方組織與 wikipedia 的說明,不確定他有沒有看,但至少後面比較沒有聲音了。

*Unicode 與 UTF-8 or UTF-16 確實是不一樣的東西, Unicode 的文字定義等於 UTF-32 ,而 UTF-8 or UTF-16 都只是 Unicode 的子集合,簡單的說, UTF-8 是常用字, UTF-16 包括 UTF-8 與 UTF-8 沒有的部份罕見字,而 UTF-32 可以看到更多看不懂的字(希望沒有誤解),但是基本上,這些編碼方式都是參照 Unicode 字元

DELPHI 7 的開發者很相信記事本這種東西,所以在資料送進程式有問題時,他會選擇使用記事本檢查,這恐怕是最大的問題所在,不過算了...

剛開始遇到的問題是直接打開看到亂碼,因為記事本與許多 Windows 環境的應用程式倚賴 BOM 字元[1]判斷 Unicode 文件,好吧,我塞進去

接著發現所有的文字都擠在一行,因為記事本認得的段落符號是 "\r\n" 而一般程式是 "\n" ,好吧,我再改

接著又發現,第二筆以後都變成亂碼,這個問題就比較麻煩了,因為花了些時間找,最後才發現...

我的環境中, Locale 是 zh_TW.UTF-8 ,而遠端執行環境是 en_US.UTF-8 ,不確定是不是這個問題造成,但是當透過 FTP 送資料進去的時候(資料是放在 FTP 上面做交換),我的測試環境使用 FTP_ASCII 方式送檔案沒有問題,但是遠端主機執行會變亂碼,需要改用 FTP_BINARY 才不會異動到檔案內容。

[1] http://en.wikipedia.org/wiki/Byte_Order_Mark

有興趣更深入而發現英文跟你不熟的可以看看這個:
http://uao.cpatch.org/index.php?技術資料

希望不會再有神奇的問題了 ;)

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=4521

評論

Sign In or Register to comment.