处理字节数组中的非UTF-8字符

时间:2014-05-28 17:39:46

标签: c# utf-8

我有一个字节数组,其中包含一些不是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字符的符号。

1 个答案:

答案 0 :(得分:0)

UTF的优点在于它可以编码大多数语言的字符;所以你可以在同一个字符流中使用希腊语和日语。

如果没有UTF,您的整个流(或者在您的情况下是一个数组)必须使用代码页定义的单一语言。每个字符由ASCII字节表示,但实际字符由代码页确定(有关详细信息,请参阅http://en.wikipedia.org/wiki/Code_page)。

例如,如果您的文本是用希腊语编写的,则可以使用代码页111:

System.Text.Encoding.GetEncoding(111)

简而言之,您需要知道ASCII文本的编写语言。