zoukankan      html  css  js  c++  java
  • Console的默认Encoding问题

    有时候我们需要在Console程序中,切换Console的OutputStream,大致的做法如下
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
              
                //下面的输出是直接打印到屏幕上的
                Console.WriteLine("开始工作" + DateTime.Now.ToString());
    
                //下面的输出将重定向到日志文件中
                var stream = new FileStream("log.txt", FileMode.Create);
                Console.SetOut(new StreamWriter(stream));
                Console.WriteLine("开始工作" + DateTime.Now.ToString());
                Console.WriteLine("结束工作" + DateTime.Now.ToString());
                //到这里结束重定向
                Console.Out.Close();
    
                //重新将输出设置到屏幕上
                Console.SetOut(new StreamWriter(Console.OpenStandardOutput()));
    
                //下面的输出将输出到屏幕上
                Console.WriteLine("结束工作" + DateTime.Now.ToString());
    
                Console.Out.Close();
            }
        }
    }
    

    以上代码是不错的,但有一个问题,就是最后一句输出会出现乱码情况

    image

    从这个情况上看,应该是编码的问题,那么应该是什么编码呢?我尝试了UTF8或者其他的Encoding,都是不行。最后是如下这样解决

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var defaultEncoding = Console.Out.Encoding;
                Console.WriteLine("默认的编码是:" + defaultEncoding.ToString());
              
                //下面的输出是直接打印到屏幕上的
                Console.WriteLine("开始工作" + DateTime.Now.ToString());
    
                //下面的输出将重定向到日志文件中
                var stream = new FileStream("log.txt", FileMode.Create);
                Console.SetOut(new StreamWriter(stream));
                Console.WriteLine("开始工作" + DateTime.Now.ToString());
                Console.WriteLine("结束工作" + DateTime.Now.ToString());
                //到这里结束重定向
                Console.Out.Close();
    
                //重新将输出设置到屏幕上
                Console.SetOut(new StreamWriter(Console.OpenStandardOutput(),defaultEncoding));
    
                //下面的输出将输出到屏幕上
                Console.WriteLine("结束工作" + DateTime.Now.ToString());
    
                Console.Out.Close();
            }
        }
    }
    
    image

    我们看到,其实默认的那个编码方式是所谓的DBCSCodePageEncoding,而此时乱码问题也随之解决了

  • 相关阅读:
    解决ssh或ftp下root用户认证失败问题
    setsockopt IP_ADD_MEMBERSHIP error!No such device的解决方案
    嵌入式Linux软件工程师面试题一
    00.嵌入式Linux开发环境搭建
    这个是豆瓣查书的api
    CentOS7.x安装MongoDB3.2.3教程
    Linux(Centos7)yum安装最新mysql
    解决npm速度慢的问题!!!
    windows下Gulp入门详细教程
    hibernate中hql查询
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/2039623.html
Copyright © 2011-2022 走看看