菜鸟的踩坑日记
.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();
}
输出:
.net core
static void Main(string[] args)
{
var t = Encoding.Default.EncodingName;
Console.WriteLine(t);
Console.ReadKey();
}
输出:
可以发现.Net Framework和.Net Core默认的字符编码是不同的
原因为.net core 默认已经不支持GB2312以及GBK格式编码了!
在程序开发中,如果牵扯到字符编码问题,尽量使用指定的字符编码,如:
Encoding.ASCII
Encoding.UTF8
或者使用指定编码类型
Encoding.GetEncoding("GBK")
尽量不要使用Encoding.Default,除非保证不会出现跨版本或者跨框架的调用。