C# 为什么System.-编码和默认编码不同(.NET Core)?
我有一个C#.NET核心应用程序C# 为什么System.-编码和默认编码不同(.NET Core)?,c#,.net,powershell,.net-core,encoding,C#,.net,Powershell,.net Core,Encoding,我有一个C#.NET核心应用程序 我跑 我得到了utf-8 但是,如果我打开PowerShell并发出 [System.Text.Encoding]::Default 我明白了 为什么系统编码与默认编码不同 在这种情况下,如何获得系统编码 我的意思是,我发现我可以用 System.Text.Encoding.GetEncoding("iso-8859-1").WindowsCodePage 但是如何确定系统的代码页呢 啊,是我自己弄的,仍然有效的是在当前文化(或InstalledCultur
我跑 我得到了utf-8 但是,如果我打开PowerShell并发出
[System.Text.Encoding]::Default
我明白了
为什么系统编码与默认编码不同在这种情况下,如何获得系统编码
我的意思是,我发现我可以用
System.Text.Encoding.GetEncoding("iso-8859-1").WindowsCodePage
但是如何确定系统的代码页呢 啊,是我自己弄的,仍然有效的是在当前文化(或InstalledCulture)中获取代码页:
您使用了什么版本的PowerShell?您是使用Windows附带的基于.NET Framework的PowerShell,还是使用PowerShellCore?@Dai:默认安装的。我也可以使用Visual Studio 2019 powershell或ISE powershell(均已安装),但每一个都返回windows-1252.FWIW,在我的计算机(windows 10,版本1809)上,I
utf-8
在基于.NET Framework的powershell、在.NET Framework和.NET Core中显示为默认值。最终,您应该使用编码的次数。默认值本质上是零;将其迁移到UTF8是.NETCore中的一个深思熟虑的选择,因此至少是可以预见的useless@MarcGrasser:同意你的看法,但是我有一堆SQL脚本需要合并,而且没有BOM(糟糕),所有的编码都不同。有些是UTF8,那些不是UTF8的是系统默认值,但不同的系统有不同的默认值,并且在prod系统上创建的要覆盖的文件需要使用系统默认值读取,这是记事本使用的。如果未指定其他内容,记事本默认情况下还应以UTF8格式保存文件。这就是问题的全部根源。记事本用户。。。
IsSingleByte : True
BodyName : iso-8859-1
EncodingName : Westeuropäisch (Windows)
HeaderName : Windows-1252
WebName : Windows-1252
WindowsCodePage : 1252
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 1252
System.Text.Encoding.GetEncoding("iso-8859-1").WindowsCodePage
public static System.Text.Encoding GetSystemEncoding()
{
// The OEM code page for use by legacy console applications
// int oem = System.Globalization.CultureInfo.CurrentCulture.TextInfo.OEMCodePage;
// The ANSI code page for use by legacy GUI applications
// int ansi = System.Globalization.CultureInfo.InstalledUICulture.TextInfo.ANSICodePage; // Machine
int ansi = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage; // User
try
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
System.Text.Encoding enc = System.Text.Encoding.GetEncoding(ansi);
return enc;
}
catch (System.Exception)
{ }
try
{
foreach (System.Text.EncodingInfo ei in System.Text.Encoding.GetEncodings())
{
System.Text.Encoding e = ei.GetEncoding();
// 20'127: US-ASCII
if (e.WindowsCodePage == ansi && e.CodePage != 20127)
{
return e;
}
}
}
catch (System.Exception)
{ }
// return System.Text.Encoding.GetEncoding("iso-8859-1");
return System.Text.Encoding.UTF8;
}