Мой код JAVA сохраняет .txt в другой кодировке (ANSI, UTF,) в зависимости от операционной системы

Я пытаюсь сохранить файл .txt с кода JAVA на компьютере с Windows 7, и он кодирует код в ANSI, но когда я делаю то же самое в Windows Server 2000, код сохраняется в UTF.

Я провожу разные тесты и проверил, что кодировка меняется каждый раз, когда я запускаю код в Windows Server 2000 без изменений в коде.

Я сохраняю файл в zip-файле, и код следующий (я изменил «Cp1252» на «ISO-8859-1», но результат тот же):

public byte[] getBytesZipFile(String nombreFichero, String input) throws IOException {

    String tempdir = System.getProperty("java.io.tmpdir");
    if (!(tempdir.endsWith("/") || tempdir.endsWith("\\"))) {
        tempdir = tempdir + System.getProperty("file.separator");
    }

    File tempFile = new File(tempdir + nombreFichero + ".txt");
    try {
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tempFile), "Cp1252"));

        bufferedWriter.write(input);
        bufferedWriter.flush();
        bufferedWriter.close();

        ByteArrayOutputStream byteArrayOutputStreambos = new ByteArrayOutputStream();
        ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStreambos);

        FileInputStream fileInputStream = new FileInputStream(tempFile);

        zipOutputStream.putNextEntry(new ZipEntry(tempFile.getName()));

        byte[] buf = new byte[1024];

        int len;
        while ((len = fileInputStream.read(buf)) > 0) {
            zipOutputStream.write(buf, 0, len);
        }

        zipOutputStream.closeEntry();
        fileInputStream.close();

        zipOutputStream.flush();
        zipOutputStream.close();

        return byteArrayOutputStreambos.toByteArray();
    } finally {
        tempFile.delete();
    }
}

Спасибо за помощь и ответы и пожелания


person Manuel José Méijome Saá    schedule 11.04.2016    source источник
comment
Какая у вас версия JVM?   -  person adranale    schedule 11.04.2016
comment
Я делаю тесты с 6 и 7, и результат тот же.   -  person Manuel José Méijome Saá    schedule 11.04.2016
comment
Я удивлен, что Java 6 и 7 могут работать даже в Windows Server 2000.   -  person Mark Rotteveel    schedule 11.04.2016
comment
Может быть, это поможет! Потоки не управляют набором кодировок! stackoverflow.com/questions/12786545/   -  person Leo    schedule 11.04.2016


Ответы (1)


Это из-за кодировки JVM по умолчанию.

Проверьте этот вопрос, чтобы узнать, как изменить кодировку по умолчанию: Установка кодировки символов Java по умолчанию?

И проверьте эту внешнюю статью для установки кодировки вашего конкретного файла: http://www.mkyong.com/java/how-to-write-utf-8-encoded-data-into-a-file-java/

person adranale    schedule 11.04.2016
comment
В его коде используется явное кодирование, поэтому такое объяснение маловероятно. - person Mark Rotteveel; 11.04.2016
comment
Только при создании текстового файла. Не в чтении файла или создании zip - person Leo; 11.04.2016