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,而此时乱码问题也随之解决了

  • 相关阅读:
    C语言中 指针和数组
    C语言中 指针与结构体
    void指针、NULL指针和未初始化指针
    C语言中 指针、引用和取值

    别--------
    快速开发 jQuery 插件的 10 大技巧(转)
    采用预取(Prefetch)来加速你的网站(转)
    HttpWatch工具简介及使用技巧(转)
    iScroll框架的使用和修改
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/2039623.html
Copyright © 2011-2022 走看看