Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Codifica caratteri strana

    Salve,
    scrivendo i caratteri 2° su file txt mi sono accorto che li scrive in questo modo: 2°
    Perché fa questo? Come posso evitarlo ?
    Non ci sono Queen senza Freddie !

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da music_ale Visualizza il messaggio
    °
    Questi sono i byte 0xC2 e 0xB0, che in UTF-8 rappresentano il codepoint Unicode U+00B0 che è il simbolo del grado ( ° )

    Se non vuoi che il file sia in UTF-8 va scritto esplicitando un encoding diverso. Ma senza vedere cosa hai scritto, quali classi di I/O hai usato, ecc... è tutto da vedere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Il codice fa semplicemente questo:

    codice:
    FileWriter fw = new FileWriter(file, true);
    pw 		   = new PrintWriter(fw);
    
    pw.print(value);
    Non ci sono Queen senza Freddie !

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da music_ale Visualizza il messaggio
    Il codice fa semplicemente questo:

    codice:
    FileWriter fw = new FileWriter(file, true);
    pw 		   = new PrintWriter(fw);
    
    pw.print(value);
    FileWriter usa il charset di "default" della tua piattaforma, che quindi risulta essere UTF-8. A FileWriter NON puoi specificare un charset.
    Ma puoi usare direttamente PrintWriter con il costruttore:

    PrintWriter(File file, String csn)
    o
    PrintWriter(String fileName, String csn)

    csn è il charset. Se non vuoi UTF-8 ... quale vuoi?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Eh in questo caso io vorrei stampare il simbolo ° senza carattere strano Â, però mi sfugge come fare, forse basta semplicemente cambiare il formato di visualizzazione dell'editor (ad esempio Notepad) ? Quindi il problema non è a monte, ma a valle ?
    Non ci sono Queen senza Freddie !

  6. #6
    Ad esempio, apro il file con Notepad++ e mi ritrovo una à, quindi mi sta bene (dal menu Formato vedo che la codifica è UTF-8 senza BOM). Se cambio la codifica in ANSI la à si trasforma in Â.
    Quindi penso che il problema sia semplicemente la codifica dell'editor, o sbaglio?
    Non ci sono Queen senza Freddie !

  7. #7
    Comunque, tornando al problema (che dopo aver fatto degli approfondimenti non dipende dall'editor utilizzato e dalla codifica impostata nell'editor, almeno in questo caso), io voglio trovare una codifica che utilizzi un solo byte per scrivere il carattere °.
    C'è una codifica del genere? La ISO-8859-1 ?
    Non ci sono Queen senza Freddie !

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da music_ale Visualizza il messaggio
    tornando al problema (che dopo aver fatto degli approfondimenti non dipende dall'editor utilizzato e dalla codifica impostata nell'editor, almeno in questo caso)
    La questione è anche del editor. Il punto è molto semplice, anzi sono 2:
    1) Quali caratteri vuoi poter rappresentare nel documento. Se per es. vuoi rappresentare il Ȁ (A with double grave), lo puoi fare in UTF-8 ma NON in ISO-8859-1.
    2) Dove il documento dovrà essere letto/visualizzato (in termini di applicazione/editor).

    Quote Originariamente inviata da music_ale Visualizza il messaggio
    voglio trovare una codifica che utilizzi un solo byte per scrivere il carattere °.
    C'è una codifica del genere? La ISO-8859-1 ?
    Sì, ISO-8859-1 è single byte e il ° (grado) è contemplato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    Ho trovato la seguente fix:

    File file =newFile("C:\\test.txt");
    FileWriter fw =newFileWriter(file,true);
    PrintWriter pw =newPrintWriter(fw);
    String test ="Address Pippo p.2 °";
    ByteBuffer byteBuffer =Charset.forName("UTF-8").encode(test);
    test
    =StandardCharsets.UTF_8.decode(byteBuffer).toString();
    pw
    .write(test);
    pw
    .close();


    Però non ho ben capito che succede dietro le quinte.
    Sai darmi una spiegazione ?
    Non ci sono Queen senza Freddie !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.