Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置.NET应用程序的默认编码?_.net_Docker_Encoding - Fatal编程技术网

如何设置.NET应用程序的默认编码?

如何设置.NET应用程序的默认编码?,.net,docker,encoding,.net,Docker,Encoding,我在两个不同的环境中运行应用程序时遇到问题:本地和docker容器内部。 问题在于,应用程序中使用了编码.Default编码。本地计算机上的默认值返回cp1252,在docker容器中返回utf-8 我知道,使用编码是一种非常糟糕的做法。默认值为,将来会被修复,但我现在无权更改。我现在要做的就是在docker中以当前状态正确运行应用程序 据我所知,Encoding.Default返回系统区域设置,所以我需要将docker映像的系统区域设置更改为使用cp1252的内容。但是我没有找到方法,怎么做

我在两个不同的环境中运行应用程序时遇到问题:本地和docker容器内部。 问题在于,应用程序中使用了
编码.Default
<代码>编码。本地计算机上的默认值返回cp1252,在docker容器中返回utf-8

我知道,使用
编码是一种非常糟糕的做法。默认值为
,将来会被修复,但我现在无权更改。我现在要做的就是在docker中以当前状态正确运行应用程序

据我所知,
Encoding.Default
返回系统区域设置,所以我需要将docker映像的系统区域设置更改为使用cp1252的内容。但是我没有找到方法,怎么做

在运行应用程序之前,我使用了
chcp
命令-
编码。默认值仍然返回utf-8。
我已经尝试在powershell中设置WinSystemLocale-SystemLocale en-us
,但仍然将utf-8作为默认编码

该应用程序是.NET Framework 4.7控制台应用程序。docker映像是,我想它是基于WindowsServer2019的

如何在cmd/powershell中更改it的系统设置以强制
编码。默认值
返回cp1252而不是utf-8

编辑:
Encoding.Default
使用GetACP()windows本机函数,在docker容器中它总是返回65001。chcp命令没有帮助:

PS C:\> $Signature = @"
>> [DllImport("kernel32.dll")] public static extern int GetACP();
>> "@
PS C:\> $acpGetter =  Add-Type -MemberDefinition $Signature -Name "Win32ShowWindowAsync" -Namespace Win32Functions -PassThru
PS C:\> $acpGetter::GetACP()
65001
PS C:\> chcp 1252
Active code page: 1252
PS C:\> $acpGetter::GetACP()
65001

只是为了增加你的痛苦(这就是你想要的,对吧?):在.NETCore中(不确定每个版本是否重要),
编码。默认值总是UTF-8;没有帮助,但可能需要了解;我认为.NETFramework总是返回一个代码页,所以;如果看到UTF8,您确定没有测试.NETCore吗?如果我在本地(windows)尝试NET47或NET48,我会看到iso-8859-1,而不是UTF8(如果我切换到.NET Core:UTF8),是的,我知道.NET Core在这方面的行为。该应用程序明确针对.NET Framework 4.7.2。因此,检查IL时,NETFX将返回UTF8,如果(且仅当)
GetACP
返回65001;那么,您可能需要将系统语言环境设置为65001—也许可以使用它在某处进行测试,看看它设置为什么值,即
set WinSystemLocale
?但是:也有一些事情表明这不会有好的结果:我已经检查过了,GetACP()在我的例子中总是返回65001。嗯,我无法回答潜在的问题,但是:至少,我们在理解场景方面又前进了一步!