首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Encoding.GetEncoding("GB2312")获取异常:'GB2312‘不是受支持的编码名称

Encoding.GetEncoding("GB2312")获取异常:'GB2312‘不是受支持的编码名称
EN

Stack Overflow用户
提问于 2022-11-29 15:57:48
回答 2查看 42关注 0票数 2

在ms doc https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding中,在编码的列表部分中,在编码表中的 gb2312 行中,在.NET Framework support列中有一个标记,这意味着gb2312是由.NET Framework本地支持的。

但当我打电话的时候

代码语言:javascript
复制
System.Text.Encoding.GetEncoding("gb2312")

在我的程序中,它给出了Win11机器和另一台Windows 2008机器中的异常,并提供了消息:

代码语言:javascript
复制
'GB2312' is not a supported encoding name

但是它在我的Win10机器中正确地获得了Win10编码,我就是在其中构建程序的。

我的程序是用.NET框架4.6.2构建的,所以我认为gb2312是本机支持的,那么有什么问题呢?

我做了些搜索,这表明

代码语言:javascript
复制
Encoding.RegisterProvider(new CodePagesEncodingProvider())

但它是.NET核心的解决方案。我认为它没有解决根本原因,也不是.NET框架的一个很好的解决方法。

更新:调用GetEncoding的代码位于dll中。

EN

回答 2

Stack Overflow用户

发布于 2022-11-29 22:07:38

试试这个:

代码语言:javascript
复制
System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var enc = System.Text.Encoding.GetEncoding("gb2312");
票数 0
EN

Stack Overflow用户

发布于 2022-11-30 13:37:35

我解决了这个特殊的问题,我会分享我的旅程,以防有人遇到同样的情况。

在根本原因之前,我必须道歉,我没有清楚地描述问题中的所有细节,对System.Text.Encoding.GetEncoding的调用(“gb2312”)在我创建的dll中,该dll构建在.NET框架上。

然后有人做了一个exe,它在我的dll中调用一个api并路由到GetEncoding行。根本原因是他的exe构建在.NET核心上,有效运行时来自他的exe,即.NET核心,而不是来自于我的dll。

因此,真正的问题仍然是.NET Core在默认情况下不支持gb2312,正如文档中所说的:https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding

解决方案也是在.NET框架上构建exe。或者接受@Vic的回答,如果你不得不把他的答案建立在.NET核心上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74616824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档