2009-09-12 44 views
1

直到最近,我的博客還使用了PHP和MySQL不匹配的字符編碼設置。我已經解決了潛在的問題,但我仍然有大量充滿垃圾的文本。例如,ï已變成ï如何恢復通過字符編碼wringer發送的文檔?

是否有軟件可以使用模式識別和統計來自動發現破損的文本並修復它?

例如,它看起來像U+00EF(UTF-8 0xC3 0xAF)已成爲U+00C3 U+00AF(UTF-8 0xC3 0x83 0xC2 0xAF)。換句話說,十六進制編碼已被用於代碼點。這種模式發生在整個我的網站(看似隨機)的非ASCII字符。

回答

0

你可能想看看正則表達式,http://en.wikipedia.org/wiki/Regular_expression。 使用此功能,您可以搜索並替換相關字符。

這裏是MySQL的正則表達式文檔http://dev.mysql.com/doc/refman/5.1/en/regexp.html

+0

我編輯了我的帖子來澄清:它不只是這個字符。 我的意思是,我當然可以轉儲數據庫,找到所有非ASCII字符序列,找到它們的原始值(在適當的情況下)並在整個文件中直接查找和替換...但我正在尋找更一般的解決方案 – phyzome 2009-09-14 14:03:45

1

你引用的例子看起來像是一個很好的舊的utf8-over-latin1。您可以快速嘗試如下查詢:

select convert(convert(the_problem_column using binary) using utf8) 

看看它是否解決了問題。

只要所有數據都經歷了相同的編碼轉換序列,只要沒有一個轉換是有損失的,那麼沿着這些行的編碼轉換就應該起作用 - 您只是逆轉其中一些轉換的效果轉換。

如果你不能依賴經過同一組編碼轉換的數據,那麼它就是掃描數據中的垃圾字符並用預期的字符替換它們,這是有風險的,因爲它取決於有人對什麼是垃圾和目的是什麼的定義。

在這個answer關於如何使用手工腳本進行修復的一些討論。我不知道有一種工具知道全部的自然語言和編碼,需要採用更先進的統計方法來發現可能存在的問題,並且建議進行確切的轉換以解決問題 - 類似這樣的做法會很有用。

相關問題