2008-08-27 94 views
2

如果你看到的只是醜陋的無字符框,你用什麼工具或策略來弄清楚哪裏出了問題?如何解決字符編碼問題?

(我所面臨的具體情況是一個<內沒有炭盒選擇>當它應該顯示日本字符)。

回答

3

首先,「醜無炭箱」可能不是一個編碼的問題,他們可能只是一個沒有安裝字體的標誌,可以在頁面中顯示字形。

當字符串從一個系統傳遞到另一個系統時,大多數字符編碼問題都會發生。對於web應用程序,這通常在瀏覽器和應用程序之間,應用程序和文件系統之間以及應用程序和數據庫之間。

因此,您需要檢查錯誤編碼的數據來自哪裏,它在源處具有何種字符編碼,以及它正在接收哪種編碼。最好的方法是發送你知道系統有問題的角色,並在應用程序的每個級別檢查它們。他們在應用程序內看起來像什麼?在數據庫中?當你從數據庫中取回它們時?當他們顯示在瀏覽器中時?

對不起,這樣一般,但問題沒有給予更多的工作。

+0

同時確保應用程序(控制檯,編輯,網頁),您正在收看的字符被正確配置,以顯示預期的字符集。 – 2009-05-28 07:02:34

1

將數據重定向到磁盤並使用Hex Editor。大多數文本編輯/觀衆在幕後進行自己的轉換,因此很難確定您看到的數據是真實的。

2

如果您發送給瀏覽器的數據發生了損壞(moji-bake),您將收到垃圾字符。另外,如果你在你的META頭文件中指定了錯誤的字符集,你的瀏覽器將錯誤地渲染頁面,導致頁面再次出現moji烘烤,有時候會在頁面的隨機位置。

當處理CJK字符集,你一定要確保使用整個程序的生命週期UTF8字符編碼(數據存儲,檢索,數據在你的代碼操作,在browsser等顯示...)

什麼是UTF8? UTF8處理二進制數據流,而不是字符串。這意味着位組合可以具有可變長度。 ASCII字符的固定長度爲8位,代表1個字節,但UTF8字符可以由6位,8位,12位等組成。因此,UTF8容易出現日文稱爲「mojibake」的情況。作爲一個編碼器,從數據庫到代碼庫到瀏覽器,你應該儘量使用UTF8。對於電子郵件,您可以使用UTF8,但您可能會發現大多數郵件服務器和客戶端仍舊舊,並使用不同字符集(例如ISO9022X)的混雜信息。

數據庫設置 如果你是一個mysql用戶,然後確保你必須確保到數據庫使用UTF8所有連接,所有表/字段使用UTF8。默認情況下,mysql使用拉丁語(瑞典語)字符集。那些奇怪的幽靈喜歡他們的幽默感!

檢查你的代碼 以我的經驗編輯器如記事本++,的Notepad2,用UltraEdit,電子,等等都有UTF8支持問題。他們主要工作,但由於他們的開發人員本身不使用CJK語言,他們不完善。像關閉物料清單(字節順序標記),損壞的標籤,糟糕的字符集轉換等問題......都存在問題。

我強烈建議使用像Maruo這樣經過驗證的UTF8編輯器。這是由一家日本公司製作的,但有英文版本(和試用版)http://www.hidemaru.interlink.or.jp/software/

最後,您可能需要將源文件轉換爲UTF8。特別是如果代碼庫本身包含CJK語言字符串。

操縱字符串 任何字符串函數都需要多字節安全。注意我沒有說雙字節。 UTF8不是雙字節,而是多字節,取決於用於表示字符的總位數。在PHP中,你需要專門調用MB字符串函數。 Ruby和其他語言具有更透明的支持,但您需要檢查文檔以瞭解應用程序服務器的風格!

META標籤 查看google.co.jp或yahoo.co.jp的META標頭。這些網站知道如何正確使用它。主要包括以下META標記的doucment <HEAD>

< META HTTP-當量= 「內容類型」 CONTENT = 「text/html的;字符集= UTF-8」 >

它通常是安全的混合英文HTML文件類型屬性也具有上述字符。因此,添加上面的META標籤似乎適用於HTML文檔:

< html xmlns =「http://www.w3.org/1999/xhtml」xml:lang =「en」lang =「en 「>

電子郵件 這是一個完全不同的罐蠕蟲。 UTF8的工作很多,但許多日本老年客戶更多地使用ISO2022X。這不值得在這裏介紹。

調試UTF8問題 一旦你有一個可靠的UTF8編輯器,比如丸尾,你可以創建靜態頁面和解決您的問題。

希望幫助