昨天在windows主机上开了个FTP服务,本想用ubuntu复习下ftp命令,发现在命令行下ls出来的中文名文件都是乱码,我的ubuntu可是已经加载了中文语言的哦;回到桌面下,使用主文件夹下的浏览网络找到windows下的FTP目录却是能够正常浏览中文的。更有趣的是,通过ftp命令行get下来的乱码文件,在桌面环境下也同样是乱码;而通过桌面环境复制到本地的中文名文件,在命令行下却是依然能够正常看到中文。。。。。。。。WHY?

研究了两天,baidu了一大堆,总算大概弄出点头绪

要弄懂这个问题,首先要了解下编码和字符集的概念(没办法,俺没学过编程,以下文字均为自己理解,必须破腚百出,各位大大莫喷)。地球人都知道计算机能读懂的只有0和1(这点上俺比他强),那么它是怎么能读懂和显示出各种各样的符号呢?这就要靠编(解)码,我们用规定好的二进制组合(具体用多少二进制位数去表示,怎么表示先不考虑)去表示一个字符,这就是编码,进而形成了字符集。具体来讲,计算机刚诞生时只认识英文,没上过小学的都知道英文就26个字母!再加上大写,标点,控制符号等等也没超过127个,所以最初的编码使用了7位的二进制组合来表示所有的符号,这就诞生了众所周知的ASCII码!随着时代发展,计算机需要识别的符号越来越多(别的不说,就是想认全中国的汉字就有多少,更别说现在世界上有多少种语言呢,还有各种稀奇古怪的符号),编码的范围越来越大,方式越来越多。为了标准化,经过多年发展到现在由Unicode一统天下(这么形容有点夸张,意会意会),Unicode也被称为统一码、万国码,是一种在计算机上使用的字符编码,它为每种语言的每种字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台的信息转换要求。简言之,我的理解就是Unicode就是一部囊括全球的语言的“字典”,注意是“字”典不是“词”典。

但实际情况是,在非英文的国家地域环境中,往往都有按照国家、地域的语言、风俗、生活环境等等不同而各自制定的在本地域国家内通用的编码方式,比如我国使用的GB系列的字符集。那么随之而来的问题就是这么多不同的编码信息之间是很难交换信息的

想交换怎么办呢?可以使用内码或代码页。所谓内码我理解就是用来系统底层用来处理字符的编码方式,那么对应应该有外码,外码应该着重于人机交互,内外码通过转换表互译。那么当使用unicode作为内码的话,无疑会提供较好的平台间的交互性

windowsxp以后的中文版本使用的是GBK编码方式,linux使用的UTF-8编码

linux下使用locale查看系统地域环境变量,使用export查看所有的系统环境变量

linux下提供了一个convmv工具来执行文件的编码转换,convmv -f 源码 -t 目标码 --notest  文件