2008-07-23 09:05:00 ithongweizhang 阅读数 576

 写文件 乱码解决 

 

 new   OutputStreamWriter(new   FileOutputStream(filename),"GB2312");  

 

 

读文件乱码解决

 

 public String readInput(String filePath, String fileName)
   throws IOException {
  StringBuffer buffer = new StringBuffer();
  try {
   FileInputStream fis = new FileInputStream(filePath + fileName);
   InputStreamReader isr = new InputStreamReader(fis, “GBK or utf-8”);
   Reader in = new BufferedReader(isr);
   int ch;
   while ((ch = in.read()) > -1) {
    buffer.append((char) ch);
   }
   in.close();
   return buffer.toString();
  } catch (IOException e) {
   e.printStackTrace();
   return null;
  }
 }

2009-09-01 13:09:00 zhongweijian 阅读数 9597

   java io写文件时写到文件的中文都成乱码,在windows是没问题的,主要是linux下默认字符集是utf-8,而windows默认编码是gbk,所以java 往文件里面写入中文时是根据系统默认字符集来写的。可以有两种方法,

1.在java io往文件写时强制用系统编码写,

 String fileEncode = System.getProperty("file.encoding");
      File outFile = 
new
 File(path+separator+fileName);
      
if
(!outFile.exists()){
         outFile.createNewFile();
      }
      
else
{
         outFile.delete();
         outFile.createNewFile();
      }
      
      OutputStreamWriter ow=
new OutputStreamWriter(new
 FileOutputStream(outFile),fileEncode);
      
for(int
 i=0;i<failList.size();i++)
      {
         ow.write(
new String(failList.get(i).getBytes("UTF-8"),fileEncode)+"/r/n"
);
      }
      ow.close();

2.修改linux的系统编码字符集

 修改/etc/sysconfig/i18n 这个文件

  将LANG="zh_CN.UTF-8"修改为:
  LANG="zh_CN.GBK"
   保存并关闭,运行下面的命令使配置生效:
  shell> source /etc/sysconfig/i18n

2016-05-12 18:44:49 tian2342 阅读数 613
我们来看写文件时用到的XMLWriter,他提供以下几种构造方法:
XMLWriter() 
XMLWriter(OutputFormat format) 
XMLWriter(OutputStream out) 
XMLWriter(OutputStream out, OutputFormat format) 
XMLWriter(Writer writer) 
XMLWriter(Writer writer, OutputFormat format) 

  最简单常用的可能是new XMLWriter(new FileWriter(...))这样的形式。可如果你一旦这么用,就会造成编码问题。由于dom4j对于文件编码的选择是才用java本身类的处理方式(可以从源码看到),这么写就是采用FileWriter的处理方式,而FileWriter是不提供对编码的处理的。于是会调用系统自身的编码,比如用中文操作系统,编码方式就是gbk,然后默认的,他赫然会在文件头写上<?xml version="1.0" encoding="UTF-8"?>。也就是说,他以当前操作系统的编码保存文件,并且竟然自动添加文件头为"utf-8"格式,这会导致很多程序无法读取正确编码,而且具有很差的移植性(比如在windows下开发,放到linux服务器下跑,毕竟一般linux服务器默认local都是utf-8)。
解决途径一:使用new XMLWriter(new FileOutputStream(...))方法。这样做,因为dom4j默认使用utf-8编码,即xml文件头默认编码方式,并且内容也会使用utf-8保存,这样可以做到一致的编码,不会出问题。
解决途径二:使用new XMLWriter(new FileOutputStream(...), outputFormat)的构造方法。
OutputFormat xmlFormat = OutputFormat.createPrettyPrint();
xmlFormat.setEncoding("utf-8");
XmLWriter writer = new XMLWriter(new FileOutputStream(...), xmlFormat);
writer.write(document);
writer.close();
如上,setEncoding可以设置存储的文件编码格式,createPrettyPrint是得到美化xml格式输出。这样的话,在不同的环境下可以获得同样的编码读写,并且真正保证了文件标称与实际编码的一致性。
【注意】如果你使用OutputFormat是为了设置文件编码,那千万别用 XMLWriter(new FileWriter(...), outputFormat)构造方法,因为前面已经说了,FileWriter不会处理编码,所以即使你使用format.setEncoding("utf-8");他仍然不会使用utf-8编码,而只是把文件头指定为utf-8,这类似不使用outputFormat的情况。而网上好多人举例用了XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);那是因为他们format.setEncoding("gbk");而windows默认就是gbk,这当然使实际编码与标称的配套了。但实际上,这种方法是不正确的,java并没有按你写的"gbk"进行编码,而是使用了系统默认编码而已,放到linux就会出现错误,所以一定的小心。
 把编码交给操作系统来控制一向是罪恶的,包括java其他地方的参数传递等,如request的参数传递,其他文件读写,如果不使用编码过滤器,不进行编码指定,可能使得整个系统失去移植性,并产生完全不可预期的错误。找起来头大不说,有时候看到encoding="UTF-8",实际上却是gkb编码会让你错过关键调试点。
还有就是记事本的罪恶性,用记事本打开不同编码的文件,往往得不到预期的效果,而且你无从得知他到底是用何种编码打开,一般使用EditPlus指定编码打开会好很多。
希望对你有帮助!
2019-12-09 08:23:43 sully2008 阅读数 19

一、查看文件编码方式

通过vi命令打开文件"vi file.txt",然后在执行":set fileencoding"可查看文件编码方式

二、修改文件编码方式

通过vi命令打开文件"vi file.txt",然后在执行":set fileencoding=utf-8"可修改文件编码方式utf-8

三、修改.vimrc显示乱码文件

1.进入当前用户的家目录,执行“cd ~”

2.查看隐藏文件,是否存在.vimrc文件,“ls -lart”

3.新增或修改.vimrc文件内容,如下所示

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

在查看乱码的文件,通常可正常显示

2016-10-27 20:42:44 q260996583 阅读数 4873

TOMCAT + JAVA + linux

问题描述

在JAVA中生成文件,文件名生成在windows下就正常,但是在linux下生成就乱码。

解决方式

代码中文件名用这样的方式转换

String remoteFileName = new String(sendModel.getString("fileName").getBytes("GBK"), 

System.getProperty("sun.jnu.encoding"));

linux中文乱码解决

博文 来自: sj836125

Linux 文件乱码

阅读数 1716

没有更多推荐了,返回首页