Salve,
scrivendo i caratteri 2° su file txt mi sono accorto che li scrive in questo modo: 2°
Perché fa questo? Come posso evitarlo ?
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 !
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.
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 !
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?
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 !
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 !
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 !
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).
Sì, ISO-8859-1 è single byte e il ° (grado) è contemplato.
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 !