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

2016-09-01 22:00:18 +08:00
 whwq2012

主要的代码如下: 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

3684 次点击
所在节点    编程
6 条回复
mythhack
2016-09-02 13:32:56 +08:00
你控制台编码有问题吧,你输出到文件试试吧。。
whwq2012
2016-09-02 16:12:33 +08:00
@mythhack 我用的是 Rider ,请问下怎么查看控制台编码呢?
whwq2012
2016-09-02 16:23:33 +08:00
@mythhack 我从记事本和 notepad++里看了下,编码方式是 ansi
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
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
2016-09-16 08:03:46 +08:00
@mingl0280 这个我觉得是 rider 的锅,因为在 cmd 里输出是正常的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX