用控制台写一些简单的程式,是一个很不错的选择。
不过windows下的console,却输出不了utf-8格式的文字,通过网友和自己尝试,有以下方法
第一种
繁体操作系统,chcp为950
C#写的Console程式运行起来时,显示不了简体字?Console.WriteLine(不过可以输入简体字Console.ReadLine)
找遍网络,发现了一种还算行的解决方法
a.改变当前字符集为65001(utf8)
b.设定字型
c.界面会乱掉,不过还是可以正常运行
d.最小化一下cmd窗口,然后再回来,即可看得到已还原的正常界面
第二种
英文操作系统,chcp为437,直接chcp 950报错(原因不明)
chcp 65001,然后修改字体后也不行,显示一些方块
1.于是只好先改注册表,先改为950
2.重新打开cmd,chcp后发现是950
然后修改字体,这时候可以显示汉字了
然后再chcp 65001(记得一定是先修改console的font,然后再chcp)
这样就可以正常运行console的输出简体字和繁体字的程式了
好了,到此为止
下面再看一个没有作过任何修改的chcp950的cmd
发现dir命令可同时显示简繁体的文件名
可type命令也显示含有简体字的文本文件内容,不过该文件必须以unicode格式存储,utf-8格式存储则会显示乱码
说明控制台确实可以在不改变任何设定的情况下输出unicode字符,即同时显示简体和繁体
type,dir命令是如何调用标准输出的?
是一个疑问
留待以后有空研究,看是否可以让C#的Console.WriteLine也具备此项功能
附一些关于windows默认字符集的看法:
1.windows系统有一个默认字符集,也叫内码页,在windows中此格式叫做ansi字符集
ansi字符集在不同的操作系统中对应的字符集也不一样
如
936(GB2312):简体操作系统
950(big5):繁体操作系统
437:英文操作系统
这个字符集兼容ASCII
并且扩展部分采用双字节
因此unicode和utf8是不行的
前者一般是两字节显示,后者则可能有三字节显示
windows关于默认字符集的设定是在
控制面板-->地区及语言选项—>Advanced-->选择非unicode的默认字符集(更改此选项,需要重启电脑)
至于为什么需要一个这样的设定,全世界都用unicode不行吗?
可能是因为:
GB2312,Big5格式的文本文件,完全没办法区分
因此windows在碰到此类文件时,需要有一个选项说明用何种字符集来读,这就是默认的内码页
当然,瀏覽器解析html可以根据meta标签的charset来选用,而不用默认字符集
xml的第一行也可以说明charset是什么
另外,如果是unicode(包括big endian),utf-8则有标志,即文本文件的开头有一些特殊的字节,用以说明现在的文件是什么格式的
2.windows系统本身应该使用的是unicode
如资料夹名称,文件名称既可以使用简体,也可以使用繁体
还有就是你写的程式,如果有字符串变量,这个字符串变量在exe中是以unicode存储的
UCS = Unicode Character Set = Unicode
UCS-2:表示Unicode 16,即用2个字节表示,65536个字符
UCS-4:则是Unicode 32,4个字节的完整unicode
2010.10.20 13:09 补录
如果是C#写的Console程式,并且要在windows排定的工作中运行,则需要设定以下键值