这里的问题是,你已经存储在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