JAVA 开发中处理乱码

    在用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编码,那么放心,绝不会出现乱码。
    

你可能感兴趣的:(java,编码)