Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# System.Text.Encoding.UTF8.GetBytes额外字节_C#_.net_Vb.net_Utf 8_Character Encoding - Fatal编程技术网

C# System.Text.Encoding.UTF8.GetBytes额外字节

C# System.Text.Encoding.UTF8.GetBytes额外字节,c#,.net,vb.net,utf-8,character-encoding,C#,.net,Vb.net,Utf 8,Character Encoding,为什么这条线 System.Text.Encoding.UTF8.GetBytes("ABCD±ABCD") 给我10字节而不是9字节? 虽然±是char(177) 是否有.Net函数/编码可以将此字符串正确地转换为9字节 虽然±是char(177) 其UTF-8编码为0xc2 0xb1-两个字节。基本上,每个代码点>=128将占用多个字节,其中字节数取决于代码点的大小 当使用UTF-8编码时,该数据为10个字节。这里的错误是您期望它需要9。±超出ASCII范围,因此它由2个字节表示。您应该使

为什么这条线

System.Text.Encoding.UTF8.GetBytes("ABCD±ABCD")
给我10字节而不是9字节? 虽然±是char(177)

是否有.Net函数/编码可以将此字符串正确地转换为9字节

虽然±是char(177)

其UTF-8编码为0xc2 0xb1-两个字节。基本上,每个代码点>=128将占用多个字节,其中字节数取决于代码点的大小


当使用UTF-8编码时,该数据为10个字节。这里的错误是您期望它需要9。

±
超出ASCII范围,因此它由2个字节表示。

您应该使用
Windows-1251
编码来获得
±
作为
177

var bytes = System.Text.Encoding.GetEncoding("Windows-1251").GetBytes("ABCD±ABCD");

本视频很好地解释了utf-8编码:。看了之后,你会意识到为什么它会产生更多字节,你会想。

+1,但你应该解释为什么它可能会像他期望的那样在Windows-1251而不是UTF-8上工作。然后,当有人试图在0xFF之外编码某个内容时,你会看到焰火……这就是我一直在寻找的答案。我完全理解0xFF之外的任何东西都不能被编码成单个字节。如果您解释了UTF8是如何工作的,那么这将是一个完美的答案。下面@user2316005发布的视频链接解释得很好,“正确”在很大程度上取决于“正确”的编码是什么。如果您打算使用UTF-8,那么:无法“正确”地将其编码为9字节。如果您的目的是使用某种编码将其转换为9个字节,那么您需要事先决定要使用基于代码页的编码,以及为什么要使用这种编码,以及要对该代码页中未定义的数据执行哪些操作。“正确”的定义:能够将其从字节转换回原始字符。示例:ASCII编码将无法正确执行此操作,尽管它将被限制为我预期的9个字符。“正确”的定义:能够将其从字节转换回原始字符。示例:ASCII编码无法正确执行此操作,尽管它将被限制为我预期的9个字符。我想我预期UTF8仅使用每个字符8位(顾名思义——至少对我而言),仅此而已。