syahd
V2EX  ›  编程

C# 请问下这里为什么乱码啊

  •  
  •   syahd · Sep 1, 2016 · 4273 views
    This topic created in 3551 days ago, the information mentioned may be changed or developed.

    主要的代码如下: DateTime fooDate = DateTime.Now; Encoding GBK = Encoding.GetEncoding("GBK"); Encoding utf8 = Encoding.UTF8; string datax = fooDate.ToString("hh:mm, dd MMM yyyy"); byte[] gb = GBK.GetBytes(datax); gb = Encoding.Convert(GBK, utf8, gb); datax = utf8.GetString(gb); Console.WriteLine(datax);

    这个在 cmd 下运行后输出正常,但是在 Rider 里输出是 09:56, 01 9 鏈� 2016 我检查了好几遍代码觉得应该没错啊 我方法是参考到这里的 http://blog.csdn.net/u014076894/article/details/40382567

    6 replies    2016-09-16 08:03:46 +08:00
    mythhack
        1
    mythhack  
       Sep 2, 2016
    你控制台编码有问题吧,你输出到文件试试吧。。
    syahd
        2
    syahd  
    OP
       Sep 2, 2016
    @mythhack 我用的是 Rider ,请问下怎么查看控制台编码呢?
    syahd
        3
    syahd  
    OP
       Sep 2, 2016
    @mythhack 我从记事本和 notepad++里看了下,编码方式是 ansi
    mingl0280
        4
    mingl0280  
       Sep 16, 2016
    我记得 C#的 string 都是 unicode 的,你如果输出的时候写到了 string 里面多半输出的值就是 Unicode 再转回 ANSI 了
    建议试试输出时转: Console.WriteLine(Encoding.ASCII.GetString(Encoding.UTF8.GetBytes(datax)));
    mingl0280
        5
    mingl0280  
       Sep 16, 2016
    嗯我刚刚试了试,你如果用 Encoding.GetEncoding("GBK").GetString(Encoding.UTF8.GetBytes(datax))直接转就是你那个结果,说明你字符串被转回了 Unicode
    Encoding.GetEncoding("GBK").GetString(Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("GBK"), Encoding.UTF8.GetBytes(datax)))
    试试
    syahd
        6
    syahd  
    OP
       Sep 16, 2016
    @mingl0280 这个我觉得是 rider 的锅,因为在 cmd 里输出是正常的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   872 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 22:04 · PVG 06:04 · LAX 15:04 · JFK 18:04
    ♥ Do have faith in what you're doing.