Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java编写UTF-8文件?_Java_File Io_Utf 8 - Fatal编程技术网

如何用Java编写UTF-8文件?

如何用Java编写UTF-8文件?,java,file-io,utf-8,Java,File Io,Utf 8,我有一些当前代码,问题是它创建了一个1252代码页文件,我想强制它创建一个UTF-8文件 有人能帮我写这段代码吗,就像我说的,它现在可以工作了。。。但我需要在utf上强制保存。。我可以传递一个参数或什么吗 这就是我所拥有的,非常感谢你的帮助 var out = new java.io.FileWriter( new java.io.File( path )), text = new java.lang.String( src || "" ); out.write( tex

我有一些当前代码,问题是它创建了一个1252代码页文件,我想强制它创建一个UTF-8文件

有人能帮我写这段代码吗,就像我说的,它现在可以工作了。。。但我需要在utf上强制保存。。我可以传递一个参数或什么吗

这就是我所拥有的,非常感谢你的帮助

var out = new java.io.FileWriter( new java.io.File( path )),
        text = new java.lang.String( src || "" );
    out.write( text, 0, text.length() );
    out.flush();
    out.close();

不要使用
FileWriter
,而是创建
FileOutputStream
。然后,您可以将其包装到一个
OutputStreamWriter
,它允许您在构造函数中传递编码。然后,您可以将数据写入

试试这个

Writer out = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("outfilename"), "UTF-8"));
try {
    out.write(aString);
} finally {
    out.close();
}
尝试使用apachecommons

您应该能够执行以下操作:

File f = new File("output.txt"); 
FileUtils.writeStringToFile(f, document.outerHtml(), "UTF-8");

如果文件不存在,这将创建该文件。

这里给出的所有答案都不起作用,因为java的UTF-8编写存在错误


我们可以使用java编写UTF-8编码文件 使用PrintWriter编写UTF-8编码的xml

或者点击

用于处理文件的:

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.*;

public class WriteReadUtf8 {
  public static void main(String[] args) throws IOException {
    List<String> lines = Arrays.asList("These", "are", "lines");

    Path textFile = Paths.get("foo.txt");
    Files.write(textFile, lines, StandardCharsets.UTF_8);

    List<String> read = Files.readAllLines(textFile, StandardCharsets.UTF_8);

    System.out.println(lines.equals(read));
  }
}
导入java.nio.charset.StandardCharset;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.io.IOException;
导入java.util.*;
公共类writeradutf8{
公共静态void main(字符串[]args)引发IOException{
列表行=数组.asList(“这些”、“是”、“行”);
Path textFile=Path.get(“foo.txt”);
写入(文本文件、行、标准字符集.UTF_8);
List read=Files.readAllLines(textFile,StandardCharsets.UTF_8);
System.out.println(line.equals(read));
}
}

允许您省略Charset参数-方法默认为UTF-8。

自Java 7以来,您可以对
文件执行相同的操作。newBufferedWriter
更简洁一点:

Path logFile = Paths.get("/tmp/example.txt");
try (BufferedWriter writer = Files.newBufferedWriter(logFile, StandardCharsets.UTF_8)) {
    writer.write("Hello World!");
    // ...
}

下面的示例代码可以逐行读取文件并以UTF-8格式写入新文件。此外,我还明确指定了Cp1252编码

    public static void main(String args[]) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(
            new FileInputStream("c:\\filenonUTF.txt"),
            "Cp1252"));
    String line;

    Writer out = new BufferedWriter(
            new OutputStreamWriter(new FileOutputStream(
                    "c:\\fileUTF.txt"), "UTF-8"));

    try {

        while ((line = br.readLine()) != null) {

            out.write(line);
            out.write("\n");

        }

    } finally {

        br.close();
        out.close();

    }
}


如果可能,请发布通过编译器的代码。它似乎是rhino(javascript)。。。诅咒Sun没有给FileWriter添加一个带字符集的构造函数。这看起来确实是一个奇怪的疏忽。Jon Skeet:既然FileWriter是FileOutputStream的包装器,它假定默认的编码和缓冲区大小,那就不能解决问题了吗?对不起,我是说OutputStreamWriter,而不是FileOutputStream。我想这是个打字错误
Writer out=…
应更正为
BufferedWriter out=
.Writer是抽象类,BufferedWriter正在实现,write()+close()被声明。这将创建一个没有BOM的实际UTF-8,而不仅仅是UTF-8。有什么办法可以强制这样做吗?据我所知,这个bug就是(因为那篇文章的作者没有提及):编写时唯一的问题是缺少BOM。没什么大不了的。另一方面,读取带有BOM的文件需要手动剥离。UTF-8不需要BOM,因此从技术上讲,写入的文件仍然是有效的UTF-8编码文本文件。错误在于读取带有BOM的UTF-8。@Chris bugs.sun.com链接已断开。你有一个有效的吗?仍然对我有效;我没有登录或其他什么。尝试用谷歌搜索bug 4508058。这也会生成一个没有BOM的文件UTF-8。。。我不知道它是否相关。@Smarty,只有在您已经在使用apachecommons的情况下。否则,仅仅因为不想再写几个字符就包含另一个jar似乎是一种可怕的浪费。我检查了commons IO 1.4,如果您阅读了问题中显示的链接上的Java文档,那么它会告诉您引入写入API的commons IO API的版本。看起来写API是从v2.0开始引入的。我只想提到我使用了FileUtils.writeStringToFile(…)(带有commons-io-1.3.1.jar)方法,而不是FileUtils.write(…)。
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.*;

public class WriteReadUtf8 {
  public static void main(String[] args) throws IOException {
    List<String> lines = Arrays.asList("These", "are", "lines");

    Path textFile = Paths.get("foo.txt");
    Files.write(textFile, lines, StandardCharsets.UTF_8);

    List<String> read = Files.readAllLines(textFile, StandardCharsets.UTF_8);

    System.out.println(lines.equals(read));
  }
}
Path logFile = Paths.get("/tmp/example.txt");
try (BufferedWriter writer = Files.newBufferedWriter(logFile, StandardCharsets.UTF_8)) {
    writer.write("Hello World!");
    // ...
}
    public static void main(String args[]) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(
            new FileInputStream("c:\\filenonUTF.txt"),
            "Cp1252"));
    String line;

    Writer out = new BufferedWriter(
            new OutputStreamWriter(new FileOutputStream(
                    "c:\\fileUTF.txt"), "UTF-8"));

    try {

        while ((line = br.readLine()) != null) {

            out.write(line);
            out.write("\n");

        }

    } finally {

        br.close();
        out.close();

    }
}