2015-01-12 43 views
0

首先,任何人閱讀本文並回復,感謝您的協助。數據庫表中的特殊Unicode問號字符

我有一個問題,我有一個網站(主要是英文),與許多翻譯爲不同的語言。我有一個存儲這些翻譯的數據庫。不幸的是,一種語言似乎在每個普通字符之間填充了問號字符。因此,任何包含這些字符的文本都不會在IE中顯示出來。

是否有任何SQL語句將查找這些字符並將其刪除?有一個查找/替換選項,但我似乎無法找到適用的規則。

感謝您提供任何幫助。

作爲一個例子,這是文本如何示出了一個表:

離子試劑盒德suppo r t V é l o - 停止顯示IE。

刪除這些下面會顯示在IE中: 離子包去支持Vé LO

任何想法,我怎麼去呢?

謝謝:)

+0

你的數據庫字段是否爲'NVARCHAR'? –

+1

你使用的是什麼dbms?列數據類型是什麼? – jarlh

+0

數據庫請> –

回答

1

您的翻譯數據庫包含有來自誤解UTF-16編碼的輸入爲ISO-8859-1(或密切相關的Windows代碼頁1252損壞的數據,你不能告訴與示例數據的差異)。

您可以嘗試通過提取數據,將其編碼回希望使用原始字節集並重新解碼,然後將其重新插入到數據庫中來消除損壞。例如在PHP中:

$mangled = "i\0O\0N\0 \0k\0i\0t\0 \0d\0e\0 \0s\0u\0p\0p\0o\0r\0t\0 \0V\0\xE9\0l\0o\0" 
$fixed = iconv('utf-16le', 'utf-8', $mangled) 
# "iON kit de support V\xC3\xA9lo" 

但是最好回到原始輸入數據並真正重新導入它。

從UTF-16編碼的字節字符串(str_replace("\0", '', $mangled))只是刪除零字節並沒有真正解決它,它將適用於ASCII字符(U + 0000-U + 007F),但你會最終與ISO字符U + 0080-U + 00FF(更常見的是你想要UTF-8)的-8859-1字節以及該範圍之外的任何其他字符將保持不可讀的廢話。