C# UTF8编码不';t在结尾处对不完整的字符引发异常
我注意到,C# UTF8编码不';t在结尾处对不完整的字符引发异常,c#,.net,character-encoding,C#,.net,Character Encoding,我注意到,UTF8Encoding类不会在输入字节序列以不完整字符结尾时引发异常,并且使用StreamReader读取输入。例如,以下程序输出0,并且不会引发异常。如果字节序列继续,将引发异常。如果开头有有效字符,它们将包含在输出中。什么是读取UTF8字节流的正确方法,以便在不完整字符上引发异常 using System; using System.IO; using System.Text; public class Test { static void utf8Test() { b
UTF8Encoding
类不会在输入字节序列以不完整字符结尾时引发异常,并且使用StreamReader
读取输入。例如,以下程序输出0
,并且不会引发异常。如果字节序列继续,将引发异常。如果开头有有效字符,它们将包含在输出中。什么是读取UTF8字节流的正确方法,以便在不完整字符上引发异常
using System;
using System.IO;
using System.Text;
public class Test {
static void utf8Test() {
byte[] bbuf = new byte[] { 228 };
string t;
using (var s = new MemoryStream(bbuf)) {
using (var sr = new StreamReader(s,new UTF8Encoding(true,true))) {
t = sr.ReadToEnd();
}
}
Console.WriteLine(t.Length);
}
public static void Main() {
utf8Test();
}
}
编辑:
以下方法确实会引发异常,因为flush
参数为true
:
static void convertTest() {
byte[] bbuf = new byte[] { 65, 228 };
char[] cbuf = new char[100];
var dec = new UTF8Encoding(true,true).GetDecoder();
int bytesUsed, charsUsed;
bool completed;
bool flush = true;
dec.Convert(bbuf,0,bbuf.Length,cbuf,0,cbuf.Length, flush, out bytesUsed, out charsUsed, out completed);
Console.WriteLine(charsUsed);
}
这没有帮助,因为
StreamReader
不会向解码器发出输入已完成的信号,因此解码器没有机会抛出异常。这可能是StreamReader中的一个bug。它确实存在。当我尝试时,效果很好,很好。这没有帮助,因为StreamReader
不会向解码器发出输入已完成的信号,因此解码器没有机会抛出异常。这可能是StreamReader中的一个bug。它确实存在。当我尝试的时候效果很好,很好。