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取系统时间时要注意下
以上只是个人在工作中发现的一些问题,觉得还是比较有实用价值,和大家分享下!
我们现在做的是联通的项目,其中有好几个板块,有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取系统时间时要注意下
以上只是个人在工作中发现的一些问题,觉得还是比较有实用价值,和大家分享下!
2.碰到过 不过没预料到是这个问题
3.碰到过 找了好长时间才找出原来是系统时间不对 不过不知道 原来是suse的原因 当时我们用的就是这个系统
lz很强大 都找出了具体原因
vi /etc/vsftpd/vsftpd.conf
加入 use_localtime=YES
然后 service vsftpd restart
不知道 对不对
恩,还要看下你FTP服务启动方式。不一定是service vsftpd restart 这个命令,有的Ftp是用xinetd启动的。这个具体配置可以上网搜下,我记不得了。