Java конвертировать текстовый файл UTF-8 в Cp1250

Я пытаюсь конвертировать текстовый файл UTF-8 в Windows-1250. Я использую Java 6 API.

Я использовал код ниже, но результат определенно не Cp1250.

import java.io.*; 

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

        InputStream  input = null;
        OutputStreamWriter output = null;   

        File destinationFile = new File("C:\\test\\Cp1250.txt");   

        try {      
            input = new FileInputStream("C:\\test\\utf-8.txt");
            output = new OutputStreamWriter(new FileOutputStream(destinationFile), "Windows-1250");

            while (input.read() != -1) {
                output.write(input.read());
            }

        } catch (Exception e) {
            e.printStackTrace(); 
        } finally {
            input.close();
            output.close(); 
        }      
    }
}

2 ответа

Решение

Вам нужен InputStreamReader, который знает, что данные из FileInputStream должны интерпретироваться с кодировкой UTF-8.

Вот пример. Я пропустил закрытие ресурсов для краткости.

    FileInputStream input = new FileInputStream(file);
    InputStreamReader reader = new InputStreamReader(input, "utf-8");
    FileOutputStream output = new FileOutputStream(destinationFile);
    OutputStreamWriter writer = new OutputStreamWriter(output, "Windows-1250");

    int read = reader.read();
    while (read != -1)
    {
        writer.write(read);
        read = reader.read();
    }

И еще одна вещь: в вашем цикле while у вас есть два вызова input.read, но вы вызываете output.write() только один раз. Это означает, что вы пишете только половину байтов, которые вы прочитали.

Вот как вы делаете это при использовании Java 7:

final Path src = Paths.get("C:\\test\\utf-8.txt");
final Path dst = Paths.get("C:\\test\\Cp1250.txt");

try (
    BufferedReader reader = Files.newBufferedReader(src, StandardCharsets.UTF_8);
    BufferedWriter writer = Files.newBufferedWriter(dst, 
        Charset.forName("windows-1252"));
) {
    String line;
    while ((line = reader.readLine()) != null) {
        writer.write(line);
        writer.newLine();
    }
    writer.flush();
}
Другие вопросы по тегам