V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whwq2012
V2EX  ›  编程

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

  •  
  •   whwq2012 · 2016-09-01 22:00:18 +08:00 · 3786 次点击
    这是一个创建于 3040 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要的代码如下: 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 条回复    2016-09-16 08:03:46 +08:00
    mythhack
        1
    mythhack  
       2016-09-02 13:32:56 +08:00
    你控制台编码有问题吧,你输出到文件试试吧。。
    whwq2012
        2
    whwq2012  
    OP
       2016-09-02 16:12:33 +08:00
    @mythhack 我用的是 Rider ,请问下怎么查看控制台编码呢?
    whwq2012
        3
    whwq2012  
    OP
       2016-09-02 16:23:33 +08:00
    @mythhack 我从记事本和 notepad++里看了下,编码方式是 ansi
    mingl0280
        4
    mingl0280  
       2016-09-16 04:34:59 +08:00
    我记得 C#的 string 都是 unicode 的,你如果输出的时候写到了 string 里面多半输出的值就是 Unicode 再转回 ANSI 了
    建议试试输出时转: Console.WriteLine(Encoding.ASCII.GetString(Encoding.UTF8.GetBytes(datax)));
    mingl0280
        5
    mingl0280  
       2016-09-16 04:45:25 +08:00
    嗯我刚刚试了试,你如果用 Encoding.GetEncoding("GBK").GetString(Encoding.UTF8.GetBytes(datax))直接转就是你那个结果,说明你字符串被转回了 Unicode
    Encoding.GetEncoding("GBK").GetString(Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("GBK"), Encoding.UTF8.GetBytes(datax)))
    试试
    whwq2012
        6
    whwq2012  
    OP
       2016-09-16 08:03:46 +08:00
    @mingl0280 这个我觉得是 rider 的锅,因为在 cmd 里输出是正常的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2355 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:04 · PVG 00:04 · LAX 08:04 · JFK 11:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.