Как написать файл UTF-8 с Java? - PullRequest
168 голосов
/ 16 июня 2009

У меня есть текущий код, и проблема в том, что он создает файл кодовой страницы 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();

Ответы [ 9 ]

192 голосов
/ 16 июня 2009

Попробуйте это

Writer out = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("outfilename"), "UTF-8"));
try {
    out.write(aString);
} finally {
    out.close();
}
190 голосов
/ 16 июня 2009

Вместо использования FileWriter создайте FileOutputStream. Затем вы можете заключить это в OutputStreamWriter, что позволит вам передать кодировку в конструктор. Затем вы можете записать свои данные в это заявление о попытках с ресурсами :

try (OutputStreamWriter writer =
             new OutputStreamWriter(new FileOutputStream(PROPERTIES_FILE), StandardCharsets.UTF_8))
    // do stuff
}
24 голосов
/ 16 июня 2009

Попробуйте использовать FileUtils.write от Apache Commons.

Вы должны быть в состоянии сделать что-то вроде:

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

Это создаст файл, если он не существует.

21 голосов
/ 29 октября 2010

Все ответы, приведенные здесь, не будут работать, так как запись в Java в UTF-8 содержит ошибки.

http://tripoverit.blogspot.com/2007/04/javas-utf-8-and-unicode-writing-is.html

17 голосов
/ 16 декабря 2014

Начиная с Java 7 вы можете сделать то же самое с Files.newBufferedWriter чуть более кратко:

Path logFile = Paths.get("/tmp/example.txt");
try (BufferedWriter writer = Files.newBufferedWriter(logFile, StandardCharsets.UTF_8)) {
    writer.write("Hello World!");
    // ...
}
9 голосов
/ 16 июня 2009
var out = new java.io.PrintWriter(new java.io.File(path), "UTF-8");
text = new java.lang.String( src || "" );
out.print(text);
out.flush();
out.close();
7 голосов
/ 13 августа 2014

Утилита Java 7 Files полезна для работы с файлами:

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 8 версия позволяет вам пропустить аргумент Charset - для методов по умолчанию используется UTF-8.

3 голосов
/ 12 сентября 2013

мы можем написать файл в кодировке UTF-8 с использованием Java, используя используйте PrintWriter для записи в кодировке UTF-8 xml

Или нажмите здесь

PrintWriter out1 = new PrintWriter(new File("C:\\abc.xml"), "UTF-8");
2 голосов
/ 24 марта 2016

Ниже пример кода может читать файл построчно и писать новый файл в формате 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();

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...