Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在寻找验证UTF-8的样本_C#_Validation_Utf 8 - Fatal编程技术网

C# 正在寻找验证UTF-8的样本

C# 正在寻找验证UTF-8的样本,c#,validation,utf-8,C#,Validation,Utf 8,假设我有一个字节流(数组),我想编写代码(使用.Net C#)来验证它是否是有效的UTF-8字节序列。我想从头开始编写代码,因为我需要报告存在无效字节序列的确切位置,甚至可能删除无效字节——而不仅仅是想知道字节流/数组是否有效 是否有可供参考的样本代码?如果没有C#代码,也可以使用C++/Java中的简单示例。谢谢 对于UTF-8的无效字节序列,我的意思是 提前感谢,, 乔治说得不错。我不知道存在无效的UTF-8序列 维基百科上的这篇文章是一个起点,但我不认为你可以有一个完整的测试。你能?我感

假设我有一个字节流(数组),我想编写代码(使用.Net C#)来验证它是否是有效的UTF-8字节序列。我想从头开始编写代码,因为我需要报告存在无效字节序列的确切位置,甚至可能删除无效字节——而不仅仅是想知道字节流/数组是否有效

是否有可供参考的样本代码?如果没有C#代码,也可以使用C++/Java中的简单示例。谢谢

对于UTF-8的无效字节序列,我的意思是

提前感谢,,
乔治说得不错。我不知道存在无效的UTF-8序列

维基百科上的这篇文章是一个起点,但我不认为你可以有一个完整的测试。你能?我感兴趣

一个完整的测试意味着对于每个序列,您可以有一个函数,该函数对每个可能的序列回答是或否。一个完整的功能

关键是如果序列不完整(短序列),该做什么或返回什么。据我所知,有一些编辑添加了一个特殊的字符,以实现它。也许你应该处理这些无效序列的情况,然后你的测试就完成了。 我不知道这是否是唯一的情况

无论如何,我会把这个问题作为一个最喜欢的,以保持跟踪的答案。肯定有人会照亮我们。

你需要的是。当
编码
类试图将字节序列转换为目标编码时,可以指定回退行为:

  • 要么
  • 或者

使用
UTF8Encoding
DecoderReplacementFallback
您可以实现您想要的目标。

这就是原始问题所要求的,即使它不是原始海报真正需要的。然而,我已经去写了,并且免费提供。也许其他人通过谷歌搜索来回答这个问题会发现它很有用

它一次占用一个字节,因此适合流处理,并将所有内容分类为有效的UTF-8或字节序列中的以下可能错误之一:

/* Ways a UTF stream can screw up */
/* a multibyte sequence without as many continuation bytes as expected.  e.g. [ef 81] 48 */
#define MISSING_CONTINUATION 1 
/* A continuation byte when not expected */
#define UNEXPECTED_CONTINUATION 2 
/* A full multibyte sequence encoding something that should have been encoded shorter */
#define OVERLONG_FORM 3
/* A full multibyte sequence encoding something larger than 10FFFF */
#define OUT_OF_RANGE 4
/* A full multibyte sequence encoding something in the range U+D800..U+DFFF */
#define BAD_SCALAR_VALUE 5
/* bytes 0xFE or 0xFF */
#define INVALID 6
该验证器具有一个很好的特性,即如果a和b是有效的utf-8字节流,而x是其他字节流,则级联a+x+b将被解码为a中编码的所有字符、字符和错误的某些组合,然后是x中编码的所有字符。也就是说,无效的字节序列不能吃掉在坏字节之后开始的有效编码字符

static void CheckUTF8(byte[] data)
{
    new UTF8Encoding(false, true).GetCharCount(data);
}

对无效数据引发
decoderCallbackException
DecoderFallbackException。索引应指向无效序列的索引。

。你说考试是什么意思?:-)实际上我是一个开发人员,我需要实现相同功能的简单示例来参考。如果你能给我一些参考样品,我将不胜感激。我手头有一些无效的UTF-8编码示例要进行测试。@DreamSonic,当使用以下代码段加载XML文档并检查它是否是UTF-8编码的(使用您上面建议的解决方案)时,如何添加回退函数?XmlDocument xDoc=新的XmlDocument();加载(“c:\\abc.xml”);在这种情况下,应该使用XmlDocument.LoadXml(…)方法,而不是Load(…)。您应该打开流,读取其所有字节,并尝试使用encoding.GetString(…)将它们转换为给定的编码。否则框架将使用其默认行为:即,打开文件(假设为UTF8),读取