事情的起因是这样的,最近因沉迷net core所以将之前windows下的程序陆续转成netcore迁往linux下。

在这期间碰上很多坑,也填了很多坑,比如线程池一类就困扰了很久,但是之前一段时间太忙,个人又比较懒,遂没有写成笔记,这次写一点简单记录吧。

这次是个爬虫想给内容加个中文的归属地,首先代码就不赘述了,直接百度找了一篇

https://www.cnblogs.com/zjoch/archive/2010/06/30/1768213.html

这篇代码我用了很多年 一直没出过问题 这次迁移到netcore下 出了问题了 不管怎么调试 获取结果都出现乱码

当时的数据库效果

开始时候粗略一看 以为是环境问题

查看了系统中文的支持等等 都没有问题,直到调试代码才意识到问题在他这个类里,他从纯真取出来的时候 就已经乱码了。

看调试图

此时脑中浮现的解决思路很简单,我心中一股怒火,嗓子眼发甜,这个问题居然能坑俩小时。

将图中最后一句代码改为即可

return Encoding.GetEncoding("GB2312").GetString(list.ToArray());

 

然而真的即可了吗 debug又崩了

至于原因 大概是netcore默认不支持GB2312。这个好解决。

从nuget引入包

System.Text.Encoding.CodePages

代码中加入

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

所以 IPSearch中ReadString的内容最后是


string ReadString(int flag)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
if (flag == 1 || flag == 2)
ipFile.Position = ReadLongX(3);
else
ipFile.Position -= 1;

List<byte> list = new List<byte>();
byte b = (byte)ipFile.ReadByte();
while (b > 0)
{
list.Add(b);
b = (byte)ipFile.ReadByte();
}
return Encoding.GetEncoding("GB2312").GetString(list.ToArray());
}

最后正常了

可以正常使用啦