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# 日期格式化的中的 正斜杠的问题
    JQuery中如何click中传递参数
    《启示录:打造用户喜爱的产品》—— 读书笔记
    json串的使用
    谷歌浏览器怎么调试js
    web页面布局思想
    js或者cs代码拼接html
    筛选DataTable数据的方法
    Ajax的简单小例子
    简单的javascript例子
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/2039623.html
Copyright © 2011-2022 走看看