這裏的問題是,你已經存儲在UTF-8
字符串到不同編碼數據庫中的 - 可能是Windows-1252
代碼頁(CP2152
)。結果,由字節序列E2 80 99
表示的UTF-8
字符’
被翻譯成CP2152
單字節字符’
。這一切都已解釋給你以前在this answer,這也解決了你目前的問題。
爲了回到原來的UTF-8
編碼,你將需要採取的字符串從數據庫返回,用下面的代碼更正:
public static string UTF8From1252(string source)
{
// get original UTF-8 bytes from CP1252-encoded string
byte[] bytes = System.Text.Encoding.GetEncoding("windows-1252").GetBytes(source);
return System.Text.Encoding.UTF8.GetString(bytes);
}
這突出的事實,這是至關重要的使用在使用GetBytes
方法時始終保持正確的編碼。
重要的是要注意,這種轉換的反向並不總是可能的,因爲CP2152
代碼空間中存在間隙 - 在從字節值轉換期間將被丟棄或更改的值。
這些間隙的十六進制值爲:81 8D 8F 90 9D
。
不幸的是,這些值存在於各種UTF-8
編碼中,例如」
(E2 80 9D
)。如果你的數據庫中有這些值中的一個,那麼它將無法正確加載。根據第一階段轉換的方式,數據庫中的第三個字節可能會丟失或損壞,在這種情況下,您無法檢索它。
你用它做什麼? – PCG
來自db的描述(字符串)包含一些需要在前端進行讀取解碼的特殊字符。 – user2388013
你還沒有解釋你對這些角色有什麼問題。你正在解碼的Base64字符串是如何生成的?你看到的輸出結果不符合你的期望? – Corey