.NET Core单元测试中如何获取ANSI编码以正确解码字节数组?
解决方案:正确解码Windows-1252编码的字节缓冲区
你的字节数组byte[] test = new byte[] {65, 32, 150, 32, 66}中,字节150对应的是Windows-1252编码中的短破折号(–),也就是你要的A – B里的符号。问题出在.NET Core默认仅提供基础编码集,Windows-1252不在其中,直接调用Encoding.GetEncoding(1252)会抛出异常。
具体解决步骤
安装System.Text.Encoding.CodePages NuGet包
在Visual Studio的NuGet包管理器中搜索System.Text.Encoding.CodePages并安装,或者通过Package Manager Console执行命令:Install-Package System.Text.Encoding.CodePages注册编码提供器
在解码前,先注册CodePagesEncodingProvider,这样就能访问Windows-1252等扩展编码(只需在程序启动时执行一次):using System.Text; Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);解码字节数组
现在可以正常使用Windows-1252编码解码:byte[] test = new byte[] {65, 32, 150, 32, 66}; string result = Encoding.GetEncoding(1252).GetString(test); // result的值即为"A – B"
为什么其他编码不行?
- ASCII编码:仅处理0-127范围的字节,大于127的字节会被替换为
?,得到A ? B。 - ISO-8859-1(Latin1):将字节150直接映射为Unicode控制字符
\u0096,并非可见的短破折号。 - UTF-8:字节150不是合法的UTF-8编码单元,会被替换为通用替换字符
�。
内容的提问来源于stack exchange,提问作者AxD
相关产品推荐
相关产品推荐

