`
小杨学JAVA
  • 浏览: 901656 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

FileWriter不能写utf-8的原因及解决

 
阅读更多

转:http://blog.csdn.net/yethyeth/article/details/1769626

/*
 * Copyright 2007 nuaa. All rights reserved.
 * This file is by yethyeth, 2007-9-3 9:27:34.
 
*/
package cn.yethyeth.sample.io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

// TODO: Auto-generated Javadoc
/**
 *//**
 * 本文件名为FileWriterSubstituteSample,实际上是在寻找FileWriter的替代者。
 * 因为FileWriter在写文件的时候,其编码方式似乎是System.encoding或者System.file.encoding(已经证明FileWriter和FileReader确实使用系统当前默认的编码方式,更多信息包括FileReader的详见http://www.javapractices.com/Topic42.cjp),
 * 在中文win下encoding基本是gb2312,在en的win下基本是iso-8859-1,总之不是utf-8。
 * 所以要创建一个utf-8的文件,用FileWriter是不行的。(FileWriter和FileReader都不支持通过参数指定编码方式,而OutputStreamWriter和InputStreamReader可以。这两个类从名字上就可以看到是字节流和字符流的组合,实际上也是连接两者的桥梁)。 目前不知道如何更改其用来写文件的编码方式,因此对于创建utf-8文件使用如下方式来代替。
 * 
 * 参见:
 * 
http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/
 
*/
public class FileWriterSubstituteSample {
    
    
/**
     * The main method.
     * 
     * 
@param args
     *            the arguments
     
*/
    
public static void main(String[] args){
        String path
="cn/yethyeth/sample/resources/XML_UTF-8.xml";
        
try {
            OutputStreamWriter out 
= new OutputStreamWriter(new FileOutputStream(path),"UTF-8");
            out.write(
"<?xml version=/"1.0/" encoding=/"utf-8/"?><a>这是测试。</a>");
            out.flush();
            out.close();
            System.out.println(
"success...");
        } 
catch (UnsupportedEncodingException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch (FileNotFoundException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch (IOException e){
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

分享到:
评论

相关推荐

    dom4j 输出XML时中文乱码解决

    这是因为 `FileWriter` 对象不支持 UTF-8 编码方式。为了解决这个问题,我们可以使用 `FileOutputStream` 对象替代 `FileWriter` 对象。下面是一个示例代码: ```java try { output = new XMLWriter(new ...

    EL中文显示乱码的解决办法

    如Java的`FileReader`、`FileWriter`应配合`InputStreamReader`和`OutputStreamWriter`使用,并指定UTF-8编码。 8. **国际化和本地化**: - 使用`ResourceBundle`处理多语言时,确保资源文件的编码是UTF-8,且在...

    Jsp中文乱码解决方案.rar

    7. 文件读写操作:在读写文件时,明确指定UTF-8编码,例如使用Java的`FileReader`和`FileWriter`时,传入`"UTF-8"`作为编码。 8. 对于POST请求,确保表单提交的编码也设置为UTF-8: ```html ...

    数据库术语-UTF_8

    例如,当我们读写文件或与数据库进行交互时,可以使用`FileReader`、`FileWriter`、`BufferedReader`、`BufferedWriter`类的构造函数指定UTF-8编码。此外,JDBC(Java Database Connectivity)API在执行SQL语句时,...

    JAVA编码问题.pdf

    2. **写入文件**:同样,使用`BufferedWriter`或`FileWriter`写入文件时,也需要指定正确的编码,例如`new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"))`。 三、**HTTP请求和响应...

    java汉字问题解决方案

    FileWriter fw = new FileWriter("filename", true, "UTF-8"); // 以UTF-8编码写入 ``` - 使用`InputStreamReader`和`OutputStreamWriter`作为`BufferedReader`和`BufferedWriter`的包装器,也可以设置编码。 2....

    java中文编码

    2. 文件读写时指定编码:使用FileReader、FileWriter等类读写文件时,明确指定编码,例如`new FileReader(file, "UTF-8")`。 3. 使用InputStreamReader和OutputStreamWriter:在处理流时,通过这些类指定编码,例如`...

    解决Linux操作系统下Java的中文乱码问题

    这主要涉及到编码格式的不匹配,因为Linux系统默认采用UTF-8编码,而某些Java应用或文件可能使用了GB2312、GBK或其他编码。本篇将详细介绍如何解决这一问题。 首先,我们需要理解字符编码的基本概念。字符编码是...

    Java编程汉字乱码原因分析及解决方法研究.pdf

    charset=UTF-8`来指定网页的编码,确保浏览器能正确解析。 4. **JSP页面编码**:在JSP文件中,可以使用`;charset=UTF-8" %&gt;`指令设置页面编码。 5. **流对象编码设置**:在I/O操作中,如使用FileReader、...

    mysql+jsp+SSH网站开发中文乱码解决方案

    如果涉及到读写文件,确保文件的读写操作也采用UTF-8编码,例如使用`BufferedReader`和`FileWriter`时指定编码。 8. **IDE和文本编辑器设置**: 开发工具如Eclipse、IntelliJ IDEA等,以及用于编辑文本文件的工具...

    Java语言的中文处理问题完整解决方案

    本文将全面解析Java中的中文处理问题,包括常见问题、原因分析及解决方案,旨在帮助开发者构建出能够正确处理中文字符的程序。 一、字符编码基础 Java采用Unicode字符集,它包含了几乎所有的汉字,保证了对中文...

    java乱码终极必杀技

    在文件读写操作中,Java的`FileReader`和`FileWriter`默认使用平台默认编码,这往往不是我们期望的UTF-8。因此,应使用`InputStreamReader`和`OutputStreamWriter`配合`BufferedReader`和`BufferedWriter`,并指定...

    java中文乱码.rar

    例如,`str.getBytes("UTF-8")`将字符串按照UTF-8编码为字节数组,`new String(bytes, "UTF-8")`则将字节数组解码为字符串。 4. 控制台输出的乱码: Windows系统下的控制台默认编码可能是GBK,而Java输出的是UTF-...

    模拟面试 Java试题

    Java的`FileReader`和`FileWriter`默认使用平台默认编码,通常需要使用`InputStreamReader`和`OutputStreamWriter`配合指定编码,如`new InputStreamReader(new FileInputStream(file), "UTF-8")`。 7. **IDE设置**...

    java读写文件避免中文乱码.docx

    为了避免中文乱码,需要在 `InputStreamReader` 构造函数中指定编码方式为 "UTF-8",例如: `InputStreamReader read = new InputStreamReader(new FileInputStream(f), "UTF-8");` 这样,在读取文件时,Java 就会...

    解决全站编码问题的javaWeb小项目

    JavaWeb应用需要正确设置`request.setCharacterEncoding("UTF-8")`来确保请求参数以UTF-8编码解析,否则可能会出现乱码。 2. **响应编码** 在服务器向浏览器返回响应时,应设置合适的Content-Type响应头,如`...

    java中文问题解决方法大全

    例如,使用`FileReader`和`FileWriter`时,传递相应的字符集(如`"UTF-8"`或`"GBK"`)到构造函数。 8. **数据库操作**: - 确保数据库连接URL、SQL语句中的字符集设置正确,与数据库服务器配置一致,避免在存储和...

    Java关于中文乱码问题的多种解决方法

    例如,使用`FileReader`和`FileWriter`时,可以通过构造函数传入`Charset`对象,如`new FileReader(file, "UTF-8")`。如果使用`BufferedReader`和`BufferedWriter`,则可以先创建`InputStreamReader`或`...

    彻底解决中文乱码的问题

    7. 源码文件编码:确保所有源代码文件使用同一编码,推荐使用UTF-8,这样能避免因源码编码问题引发的编译期乱码。 通过以上方法,我们可以有效地防止和解决Java中的中文乱码问题。然而,每个具体问题可能需要针对性...

Global site tag (gtag.js) - Google Analytics