Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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
C# 为什么System.-编码和默认编码不同(.NET Core)?_C#_.net_Powershell_.net Core_Encoding - Fatal编程技术网

C# 为什么System.-编码和默认编码不同(.NET Core)?

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

我有一个C#.NET核心应用程序
我跑

我得到了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;
}