You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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)会抛出异常。

具体解决步骤

  1. 安装System.Text.Encoding.CodePages NuGet包
    在Visual Studio的NuGet包管理器中搜索System.Text.Encoding.CodePages并安装,或者通过Package Manager Console执行命令:

    Install-Package System.Text.Encoding.CodePages
    
  2. 注册编码提供器
    在解码前,先注册CodePagesEncodingProvider,这样就能访问Windows-1252等扩展编码(只需在程序启动时执行一次):

    using System.Text;
    
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    
  3. 解码字节数组
    现在可以正常使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 14:58:24