A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鬼鬼 中级黑马   /  2014-3-23 22:46  /  1691 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 鬼鬼 于 2014-3-24 20:14 编辑

为了解决这个帖子里遗留的问题:
http://bbs.itheima.com/thread-110572-1-1.html
自己写了一个测试:
  1.         static void Main(string[] args)
  2.         {
  3.             ConsoleKeyInfo info;
  4.             int code = 0;
  5.             info = Console.ReadKey();
  6.             code = Convert.ToInt32(info.KeyChar);
  7.             Console.WriteLine("输入流编码:{0}",Console.InputEncoding.EncodingName);
  8.             Console.WriteLine("输出流编码:{0}", Console.OutputEncoding.EncodingName);
  9.             Console.WriteLine("{0}",code);
  10.             Console.ReadKey(true);
  11.         }
复制代码

程序运行后键入回车,输出结果为:
输入流编码:简体中文(GB2312)
输出流编码:简体中文(GB2312)
13

查了一下编码表,ASCII中的13正好就是回车键,看来回车键的ConsoleKeyInfo中KeyChar值应该就是这个特殊的控制字符:ASCII编码中13对应的回车键。
但是问题来了,我的控制台的当前编码不是gb2312么?刚才查了下,gb2312中13是未编码的,为什么会在gb2312编码的输入流中读到编码是13的字符呢?
望高人解答…………

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

3 个回复

倒序浏览
GB2312编码含盖了ASCII编码。当由字节数组转换为GB2312编码的字符时,如果转换的字节数组的值是:0 到127,转换就用ASCII码表示,则用1个字节表示一个字符。
回复 使用道具 举报
code = Convert.ToInt32(info.KeyChar);

其中info.KeyChar得到info对象对应的Unicode字符 13'\r' , 然后convert得到13
也就是说你在程序中将拿到的中文编码对象info通过keychar得到了Unicode字符
回复 使用道具 举报
张变 发表于 2014-3-24 15:32
code = Convert.ToInt32(info.KeyChar);

其中info.KeyChar得到info对象对应的Unicode字符 13'\r' , 然后 ...

哦,原来是这样。谢谢啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马