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

1

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

Я использовал код ниже, но результат, безусловно, не 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(); 
        }      
    }
}
Теги:
utf-8
codepages

2 ответа

4
Лучший ответ

Вам нужен 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() только один раз. Это означает, что вы пишете только половину байтов, которые вы прочитали.

  • 0
    У меня есть пустой выходной файл с этим кодом :(
  • 1
    Как я уже сказал, я пропустил закрытие ресурсов, вам все равно нужно это сделать. Файл, вероятно, пуст, так как FileOutputStream не был сброшен.
Показать ещё 1 комментарий
1

Вот как вы это делаете при использовании 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();
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню