.FrameWork和.NetCore的默认编码问题

489 阅读1分钟

菜鸟的踩坑日记

.FrameWork和.NetCore的默认编码问题

最近在研究RabbitMQ的时候涉及到了加密算法,于是从网上Copy了一份DES加密的代码过来,一开始使用起来一点错误都没有,后来做WinForm的模拟器进行演示的时候,发现传输后的数据乱码了。

打了断点调试发现是客户端进行加密的时候,加密出的数据就已经是乱码数据了,所以我就去找是不是编码问题,后来发现这个方法里面的编码格式用的是默认格式,即:

byte[] inputByteArray = Encoding.Default.GetBytes(code);

于是我建立了两个应用程序验证一下:

.Net Framework

static void Main(string[] args)
{
    var t = Encoding.Default.EncodingName;
    Console.WriteLine(t);
    Console.ReadKey();
}

输出:

image.png

.net core

static void Main(string[] args)
{
    var t = Encoding.Default.EncodingName;
    Console.WriteLine(t);
    Console.ReadKey();
}

输出:

image.png

可以发现.Net Framework和.Net Core默认的字符编码是不同的

原因为.net core 默认已经不支持GB2312以及GBK格式编码了!

在程序开发中,如果牵扯到字符编码问题,尽量使用指定的字符编码,如:

Encoding.ASCII

Encoding.UTF8

或者使用指定编码类型

Encoding.GetEncoding("GBK")

尽量不要使用Encoding.Default,除非保证不会出现跨版本或者跨框架的调用。