2 mxy841205 mxy841205 于 2016.02.05 09:44 提问

系统编码与文件名的关系

假如有两个操作系统,分别是A和B,都是Windows的操作系统
系统A的系统编码是GBK,系统B的系统编码是Shift_JIS

我在系统A中做成一个文本文件(测试.txt),文件内容是“测试测试测试”
然后把这个文本文件拷贝到系统B中,
在系统B中这个文件的文件名显示的还是(测试.txt),但是内容变成乱码了。
内容乱码的原因应该是两个系统的系统编码不一样,
我的问题是既然系统编码不一样,为什么文件名能够正常显示哪?

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.05 22:41

windows操作系统的区域选项中有一个设置,叫做“非unicode使用的语言”,这个设置(而不是windows操作系统本身)决定了你打开一个非unicode编码的文件,用什么本地编码来解释你的文本。
至于文件名也是一样的。只是现代操作系统都使用unicode编码了,没问题了。
早期windows 95时代,拿到繁体的软件安装盘,的确文件名是乱码,所以那时候流行南极星、RichWin等转码的软件。

zuishikonghuan
zuishikonghuan   2016.02.07 18:00

文件名都是UTF16编码,而文件内容是以ANSI编码存储的。 微软提出了一个叫“代码页”的感念,Ansi在不同的代码页下标识的字符不同,例如,在大陆Ansi表示GBK,GB2312等编码,在台湾表示BIG5编码。用户只需要把系统的代码页(语言和区域设置)设置到自己国家的代码页,就可以很方便地使用自己国家文字的程序和文档了。但是随着发展,代码页越来越多,国际交流原来越频繁,于是,Unicode诞生。你只需要把文件保存一个unicode编码即可,比如UTF8,UTF16

oyljerry
oyljerry   Ds   Rxr 2016.02.05 15:12

windows上面文件名的编码格式是统一的
NTFS stores filenames in UTF16

而文件内容,取决于你的设置,以及编码方式

xyz347
xyz347   2016.02.05 10:18

取决于你怎么拷贝,拷贝替你处理了文件名

xyz347
xyz347 可以看一下这个帖子 http://zm10.sm-img2.com/?src=http3A%2F%2Fvifix.cn%2Fblog%2Fconvmv-linux-convert-filename-encoding.html&uid=e9c01308f9a44a08d74c42c15d38d4f6&hid=4ddd840bdfa9d8c36c3864996370516e&pos=5&cid=9&time=1454645243462&from=click&restype=1&pagetype=0000004000000402&bu=web&query=%E6%96%87%E4%BB%B6%E5%90%8D++%E7%BC%96%E7%A0%81&mode=&uc_param_str=dnntnwvepffrgibijbprsvpi
接近 2 年之前 回复
mxy841205
mxy841205 也就是说在操作系统的拷贝黏贴操作中对文件名的编码进行了转码吗,如果是写一个程序进行文件拷贝,在拷贝的过程中没有进行转码处理的话,文件名也会变成乱码吗?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!