在用COMMON-NET处理FTP时,遇到中文出现了乱码问题,乱码问题早先在做信息抽取的时候也遇到过,当时记得用第三方的词典,但是其是GBK编码,而我系统为UTF-8。
这次也一样,工程为UTF-8,但是用COMMON-NET从FTP上下载文件的时候,中文乱码。无奈,上网搜,结果各种尝试,各种不行。
靠人不如靠己,查看FTP这个类,发现:
public static final String DEFAULT_CONTROL_ENCODING = "ISO-8859-1"
COMMON-NET的默认是“ISO-8859-1”编码,也就是其从服务器上读取的文件,都是按照ISO-8859-1编码方式处理的,在工程中返回字符串时,已经是乱码,所以不管怎么改,都是乱码。
The default character encoding used for communicating over an FTP control connection. The default encoding is an ASCII-compatible encoding. Some FTP servers expect other encodings. You can change the encoding used by an FTP instance with setControlEncoding.
FTP服务器是GBK的,所以将值改为GBK后,在UTF-8的工程中就可以正确解读中文了。
写到这里,不深入,下次遇到这个问题还会被卡住。不妨探究下问题的根本。
是什么导致中文乱码的?
当磁盘上的文件的编码和我们系统中的编码不一致的时候,此时读文件就会产生乱码,一般文件的I/O都是以字节流的方式read和write。当系统是UTF-8,而原始文件是GBK,那么系统按照UTF-8的方式encoding GBK的文件,就会产生字节错位,所以会产生乱码。
知道了如何产生乱码,接下来的问题就是如何解决乱码问题。
首先我们得知道原始文件是什么样的编码格式,如果不晓得原始文件是什么编码,那必须写一个字符检测程序(这一点浏览器做的是相当的好,不论是什么编码格式的网页,浏览器都能自动的检测出,并且转换成我们本地的格式,从而我们不会看到乱码);
知道是什么编码的文件,那么我们就按照相应格式的文件编码格式读取文件,比如是UTF-8的文件,那么就以UTF-8的格式读取文件,这个格式与我们的工作平台无关,此时如果我们的工作平台是GBK编码,那么放心,绝不会出现乱码。