在windows下如何查看文件编码格式?
略长,可直接跳到黑斜体查看答案.
文件是什么?是保存在储存媒介(如电脑硬盘)上的数据.
怎么保存文件的?这个过程很复杂,表层来看就如你用记事本输入了一个'你'字然后保存到了桌面'1.txt',之后这个文件可以在你的需求下在不同的媒介间传输
怎么查看文件的数据?这个过程当然和保存是相对的,简单来看就好比你在windows下用记事本打开了'1.txt'
好了,下面详细说一下.我们都知道机器是个傻瓜,就像电脑他只认识0和1,所以这些文件的实质就是一大堆的0和1构成的.机器只认识0和1,但是我们人认识的东西可太多了,不可能局限于机器码啊.因此就需要一种类似对暗号一样的过程来翻译我们的语言给机器,将机器码翻译成我们看的懂文字.
因此字符集(Character Set)诞生了,也就是上面的暗号,专门作为我们人与机器的中间翻译官.
我们都知道就目前而言呢世界还不是只有中文(当然以后就有可能是只有中文了,哈哈哈哈~),还有其他什么英/日/韩文等丑八怪啥的,它们长得不一样(咱们汉字就是美,各个气宇轩昂人见人爱),数量也不一样(咱们汉字就有十万多个),因此各个地方有各个地方的字符集(私家翻译官~).
各个地方要是都用自己的翻译官那管理起来岂不是很麻烦,为了统一与方便,于是一种全球翻译官出现了:统一码(Unicode,也叫万国码等).这个翻译官熟悉全世界的语言,就像是各个私家翻译官核心的集合.因此在任何地方,这个字符集都可用.
后来的Windows系统内带两位翻译官:全球(Unicode)和私家(ANSI),在简体中文版的Windows中ANSI字符集为国标码(GBK(前生是GB2312后扩成为GB18030),也就是我们国家的翻译官)字符集,查看本地的私家翻译官可以通过命令行键入'chcp'查看更改当前代码页(Code Page,字符集的别称,936为简体中文).
正常情况下人们肯定是用私家翻译官了,所以你保存的txt文件在没有特意指定为Unicode格式保存的时候默认就是ANSI格式的.
回到上面的例子,你在记事本里输入了'你'字并保存到文件'1.txt',这个时候私家翻译官(ANSI:GBK)把你的'你'字翻译成机器认识的0和1(十进制值为50403)储存在了硬盘上.好了现在你是这个文件的创始人,你知道这个文件是对照ANSI字符集保存的(ANSI编码),所以你在下次打开这个文件读取内容的时候就会找私家翻译官再次对照ANSI字符集查表翻译出硬盘上的'50403',你就看到了'你'字.
那如果你的邻家小孩得到这个文件呢?或者你暗恋的女孩儿?安倍?特朗普?外星人?对于邻家小孩或者你的女神而言可能你们是同一个翻译官,所以他们可以误打误撞正常访问这个文件,对于安倍/特朗普,他们可不认识你,根本不知道你哪个地方的用的哪个翻译官,所以他们是没法简单的访问这个文件的,外星人更别提了,根本就不知道你这文件到底想表达什么.当然要想访问也不是不行,精通全宇宙的语言,尝试所有代码页,根据情况判断50403实际指的哪个字符(不过这个文件就一个'你'字,或许这个想访问的生物还必须跟你有点心灵感应哈哈哈)
到这儿你应该清楚了,不同地方的语言最终被翻译成全世界统一的机器码(0/1)储存起来,要想知道机器码所表达的原本意思必须找同一个翻译官才行,不然各家有各家的翻译法,那肯定不对.
到这儿你应该你知道你这个问题的答案了吧,就是无法查看,或者像上面那样学富五车毅力惊人且能通灵万物,那或许可以知道,因为这一切都是你的自由,大家的自由(我将一个文件以日本语的字符集储存起来,这样别人以GBK打开的时候就会乱码,而我就是不想让别人轻而易举的看到,这是我的自由),微软又或其他什么个人/组织都没有规定如何确定一个文件的编码格式,大家都没有一个统一(因为字符集就是统一了,Unicode就是统一,难道要强迫所有人任何文件在储存的时候必须标记编码格式吗?太死会限制创新的,这个世界就会无聊下去),人们只是将需要的数据以机器码的形式储存起来了而已.
按理说呢你的问题已经回答完毕了,但是我还要补充一下,windows下的文本格式文件(TXT)其实是有作标记用的什么字符集(准确来说是编码格式,详情下文)的:文件头两(三)个字节储存了十六进制FFFE或者FEFF或者EFBBBF的表示Unicode字符集(依次为UCS-little/UCS-big/UTF8,下文有讲这是什么),没有那就是ANSI,当然在windows的里这两个字节数据翻译官是不翻译的.Unicode不像ANSI那么简单,直接查表就行了,Unicode字符集的编码方式有UTF8/UTF16/UCS-little(Unicode)/UCS-big等.(这就像"今晚月色真美",我觉得这是环境美的意思,你觉得是心情好的意思,她觉得是我喜欢你的意思)
什么是编码方式呢?举个例子:100看到这个数,你第一反应是不是觉得他是一百,但是谁告诉你是从左往右看了,从右往左看这就是一,再者谁又告诉你这三个数字组合成一个数了,它还是三个单独的数1,0,0呢.你气不气哈哈哈.编码就是这么回事,他规定了如何看代机器里的数据,求出数据代表的数值,然后再根据值查字符集表翻译.(至于为什么统一码不直接查表而要再多此一举搞出这些编码方式若是你感兴趣可以上网查阅相关资料(Unicode的编码方式),当然这个世界上还是很少有人脱裤子**的,肯定是先有需求,像UTF8就是为了方便在网络上传输,具体还要看背景之类的,世上没有绝对的对错)
总结:机器码(一大堆连续的0和1)-->编码方式(如何将0和1计算成各个数值的规则)-->字符集(一张字符和数值一一对应的表格)
再举个例子:,你和你的伙伴们考试作弊,规定敲桌子一下是A,两下是B,三下是C....(字符集),这个时候老师说上次考试太吵,下次谁要是考试发出呻吟(哈哈哈哈哈哈哈)就拖出去宰了,于是坐在你旁边的小飞跟你说桌上放一个本子是1,放两个本子是2类推...1 2和之前一样对应A B类推...坐在后面的大瓜(看名字就知道只抄答案不给答案的那种,哈哈哈哈)急了,他看不到本子啊,于是他说你们把腿伸出来,晃一下是1,晃两下是2..........不说了吧应该都懂(这些就不形象的比作编码哈哈哈) 最后就是抄答案了
ps:上述纯属扯淡请勿效仿,有这精力心思费劲不如好好考试!
最后补充一下,既然记事本看不到FEFF/FFFE数据,那么你就无法判断编码格式,这个其实很简单,那就是你到网上找一个二进制查看器或者十六进制查看器,像UltraEdit啥的....当然如果不用工具也是可以的....只是有点麻烦,毕竟windows没有直接提供相关的功能,具体方法如下:
新建一个空白文本文件,假设他的全路径为PathA(如D:\新建文本文档.txt),打开键入两个空格保存关闭(默认是ANSI的).
假设你要查看编码格式的文件全路径为PathB(如D:\Target.balabala小魔仙)
WIN+R打开运行窗口,键入cmd,按下回车
在cmd窗口里键入fc /b PathA PathB回车(如:fc /b D:\新建文本文档.txt D:\Target.balabala小魔仙)
小白需要注意命令行是根据空格分隔参数的,所以路径中应该避免出现空格,或者用引号将路径包起来传递
显示这种说明是UCS-little
00000000: 20 FF
00000001: 20 FE
显示这种说明是UCS-big
00000000: 20 FE
00000001: 20 FF
显示这种说明是UTF8
00000000: 20 EF
00000001: 20 BB
无上述情况应该归为ANSI或者自由文件