2016-04-11 2 views
0

J'essaie de sauvegarder un fichier .txt depuis un code JAVA, dans une machine Windows 7, et ce code le code dans ANSI, mais lorsque je fais la même chose dans un Windows Server 2000, le code est enregistré en UTF.Mon code JAVA enregistre un .txt dans un codage différent (ANSI, UTF, ...) en fonction du système d'exploitation

Je fais des tests différents et j'ai vérifié que le codage change lorsque je cours le code chaque fois dans Windows Server 2000 sans modifications sur le code.

je suis d'enregistrer le fichier dans un fichier zip et le code est le suivant (je l'ai changé « Cp1252 » par « ISO-8859-1 » mais le résultat est le même):

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(); 
    } 
} 

Merci par l'aide et les réponses et salutations

+0

Quelle est votre version JVM? – adranale

+0

Je fais les tests avec le 6 et le 7 et le résultat est le même. –

+0

Je suis surpris que Java 6 et 7 peut même fonctionner dans Windows Server 2000. –

Répondre

0

C'est à cause du codage par défaut de la JVM.

Cocher cette question pour savoir comment changer l'encodage par défaut: Setting the default Java character encoding?

Et vérifier Articel externe pour régler l'encodage de votre fichier spécifique: http://www.mkyong.com/java/how-to-write-utf-8-encoded-data-into-a-file-java/

+0

Son code utilise un codage explicite, donc cette explication est peu probable. –

+0

Seulement dans la création de fichier texte. Pas dans la lecture de fichier ou la création de zip – Leo