1  JAVA读写时的字符集问题
   我们现在做的是联通的项目,其中有好几个板块,有C++,有java,既然是联通的项目肯定涉及到收费,话单。我们是C++负责写话单,然后java负责将这个话单转成外部话单。java在读话单的时候是从C++生成的话单文件中读取,而c++那边在写话单的时候用的字符集是GBK,而java这边在读的时候用的是以下的语句
    BufferedReader br=new BufferedReader(new FileReader(file));
    br.readline(); ------------这里就开始读话单了。
但是这样读的时候我们没有指定用什么字符集,这时JAVA就会去读取系统默认的字符集,如果系统的不是GBK的话就会出现不可预见的问题。
    建议:我们在读取其他部件写的文件时最好指定字符集
    BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File()),"指定字符集"))2  在使用jdk的split方法时注意
   这个是看到我们项目中自己写的split方法想到的,当时还纳闷为什么要重写。
   split在分割字符窜时,它会从最后一个分割的字符集判断,如果是空的话分割后的数组长度就减一,往前推,如果还是空的再减一
   如:a|b|c||  最后一位也是空,然后有个回车   
       这样的字符窜用“|”分割后长度就是3而不是53  最后一个也许用的不多
   现在也有好多公司用的服务器是SUSE的linux,其中有两种ftp服务,一个是vsftpd,一个是pure-ftpd,如果用的是vsftpd要注意下,它默认的时区是格林威治时区,就是如果我们现在是20:00,则用ftp登陆到服务器上看到的是12:00,比我们晚8个小时,这个在要用ftp取系统时间时要注意下
以上只是个人在工作中发现的一些问题,觉得还是比较有实用价值,和大家分享下!
 

解决方案 »

  1.   

    1.前几天碰到的 郁闷了老半天
    2.碰到过 不过没预料到是这个问题
    3.碰到过 找了好长时间才找出原来是系统时间不对  不过不知道 原来是suse的原因 当时我们用的就是这个系统
      lz很强大 都找出了具体原因
      

  2.   

    刚问了个同事  第三个问题解决方案
    vi /etc/vsftpd/vsftpd.conf
    加入 use_localtime=YES 
    然后  service vsftpd restart 
    不知道 对不对
      

  3.   


    恩,还要看下你FTP服务启动方式。不一定是service vsftpd restart 这个命令,有的Ftp是用xinetd启动的。这个具体配置可以上网搜下,我记不得了。
      

  4.   

    LZ,有个问题请教一下。。你这个是C++生成话单文件在一个目录,然后java 去读取这些话单文件么?java是以FTP的形式去读取这些话单文件的么?