【发布时间】:2014-07-18 01:48:35
【问题描述】:
我有一个字节数组,其中包含一些不是 UTF-8 的字符。这些字符不能使用 UTF-8 编码反序列化。所以,我的问题是,我怎样才能处理这些字符并使字符串在任何语言中都可读。
例如,如果我有一个数组:
byte[] b = myArrayWithNonUTF8Characters;
我尝试使用以下方法反序列化数组:
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(MyObject));
MyObject objResponse = (MyObject)jsonSerializer.ReadObject(new MemoryStream(b));
然后我收到一个错误,即数组包含无效的 UTF8 字节。
有什么办法可以做到这一点?
PS:请不要给我这个答案:string s = System.Text.Encoding.UTF8.GetString(b, 0, b.Length); 它只会返回替换非 UTF-8 字符的符号。
【问题讨论】:
-
那么文本的编码是什么是?这些数据是从哪里来的?您是否乐于使用替代 JSON 库,例如Json.NET?
-
@JonSkeet 该数组来自网络服务。
byte[] b = _client.UploadValues(address, "POST", nvc);而且我不知道它的编码。有什么办法可以查到吗? -
HTTP 响应应包含在 Content-Encoding 标头中。要在代码中找到它,您可能需要使用 WebRequest/WebResponse 或 HttpClient 而不是 WebClient。
-
您必须使用正确的编码对其进行转换。试图猜测编码会导致奇怪的结果。
-
@JonSkeet 我不确定是否可以使用 HTTPClient。你知道其他解决方法吗?