18910140161

.NET Core 中使用GBK GB2312编码报错的问题

顺晟科技

2021-06-16 10:34:25

254

错误描述

环境

dotnet core 2.1 2.2 dotnet core 3.1 dotnet core 5.0

现象

当代码中使用

系统文本。编码。getencoding(' GB 2312 ')

//或者

系统。文本。编码。获取编码(“GBK”)

会抛出异常:

未处理的异常:系统argumentexception :"GB 2312 "不是受支持的编码名称。有关定义自定义编码的信息,请参见编码文档RegisterProvider .方法。

或者

未处理的异常:系统。参数异常:“GBK”不是受支持的编码名称。有关定义自定义编码的信息,请参见编码文档RegisterProvider .方法。

解决

原因

使用如下代码检查支持的编码:

系统文本。编码。get encodments();

发现获得的编码中没有GB2312或者GBK。

解决办法

向项目中添加如下包:

系统。文本。编码。代码页

根据系统。文本。编码。代码页主页的描述,这个包能为程序提供Windows-1252、Shift-JIS和GB2312三种编码。

支持基于代码页的编码,包括Windows-1252、Shift-JIS和GB2312 .

所以导入这个包之后,我们将能使用GB2312编码。

在。文件文件中应添加如下代码:

项目组

包引用包含='系统。文本。编码。代码页'版本='4.4.0' /

/ItemGroup

或者在项目目录执行如下命令:

程序员添加包系统。文本。编码。代码页-4 .4 .0版

当然,其中的版本号需要自行修改为最新。此时(2018.02.22)最新版是4.4.0 。

别忘了执行程序员还原。

第二步

根据错误提示,我们需要对引用的编码使用编码RegisterProvider .函数进行注册。

在使用系统文本。编码。getencoding(' GB 2312 ')之前,在代码中执行:

系统。文本。编码。注册表提供程序(系统文本。codepagesencoding提供程序。实例);

注册完之后,获取GB2312编码对象就不会报错了,并且可以正常使用其中的函数。

其他问题

至此我们解决了关于GB2312编码的问题。但是程序中仍然无法使用商业版编码。针对商业版编码数据的解析问题仍存在。

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航