zoukankan      html  css  js  c++  java
  • asp.net core输出中文乱码的问题

    摘要

    在学习asp.net core的时候,尝试在控制台,或者页面上输出中文,会出现乱码的问题。

    问题重现

    新建控制台和站点

        public class Program
        {
            public static void Main(string[] args)
            {           
                Console.WriteLine("您好,北京欢迎你");
                Console.Read();
            }
        }

    站点

        public class Startup
        {
            // This method gets called by the runtime. Use this method to add services to the container.
            // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
            public void ConfigureServices(IServiceCollection services)
            {
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole();
    
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.Run(async (context) =>
                {
                    await context.Response.WriteAsync("您好,北京欢迎你");
                });
            }
        }

    那么我们获取“GB2312”编码,然后对其编码呢?

            public static void Main(string[] args)
            {
                Console.WriteLine("您好,北京欢迎你");
                try
                {
                    Console.WriteLine(Encoding.GetEncoding("GB2312"));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                Console.Read();
            }
        }

    'GB2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.
    Parameter name: name

    上面的大概意思是Encoding 不支持GB2312编码,需要使用Encoding.RegisterProvider方法进行注册Provider。

                try
                {
                    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                    Console.WriteLine(Encoding.GetEncoding("GB2312"));
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                Console.Read();

    CodePagesEncodingProvider在包System.Text.Encoding.CodePages中

          "System.Text.Encoding.CodePages/4.0.1": {
            "type": "package",
            "dependencies": {
              "Microsoft.NETCore.Platforms": "1.0.1",
              "System.Collections": "4.0.11",
              "System.Globalization": "4.0.11",
              "System.IO": "4.1.0",
              "System.Reflection": "4.1.0",
              "System.Resources.ResourceManager": "4.0.1",
              "System.Runtime": "4.1.0",
              "System.Runtime.Extensions": "4.1.0",
              "System.Runtime.Handles": "4.0.1",
              "System.Runtime.InteropServices": "4.1.0",
              "System.Text.Encoding": "4.0.11",
              "System.Threading": "4.0.11"
            },
            "compile": {
              "ref/netstandard1.3/System.Text.Encoding.CodePages.dll": {}
            },
            "runtimeTargets": {
              "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": {
                "assetType": "runtime",
                "rid": "unix"
              },
              "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": {
                "assetType": "runtime",
                "rid": "win"
              }
            }
          },

    好了,我们修改下代码,先注册,然后输出中文

        try
                {
                    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                    Console.WriteLine(Encoding.GetEncoding("GB2312"));
                    Console.WriteLine("您好,北京欢迎你");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }

    结语

    所以在页面上输出,或者在控制台输出中文的时候,要注意进行注册Provider。

    参考

    https://msdn.microsoft.com/zh-cn/library/system.text.encoding.registerprovider(v=vs.110).aspx

  • 相关阅读:
    第一个爬虫和测试
    乒乓球比赛模拟分析
    appium入门
    node安装
    自动化测试---selenium
    自动化测试---元素定位
    Shell脚本
    Shell脚本的编写
    Linux安装jdk,mysql,tomcat
    Linux的简单使用
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/6136482.html
Copyright © 2011-2022 走看看