|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2002
Messaggi: 437
|
[Java] Caratteri UTF8
Ciao a tutti. Vado dritto al sodo e vi espongo il mio problema.
Devo manipolare un file di testo che contiene, invece dei caratteri della tastiera italiana 'è', 'à', ... degli altri caratteri speciali tipo 'è', 'Ã'... C'è qualche modo per tradurre qualcosa tipo 'è' in 'è', 'Ã' in 'à' e così via? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
tradurre secondo quale schema? cioé, quale carattere deve diventare à, quale deve diventare è, e via dicendo?
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2002
Messaggi: 437
|
Dunque, provo a spiegarmi meglio. Non è che qualcuno mi ha fatto uno scherzo sostituendo caratteri a caso, si tratta di un software per salvare i messaggi per il cellulare in file di testo, che funziona a meno dell'errore dei caratteri accentati.
Se apro il file esportato da questo software, al posto dei caratteri accentati mi compaiono altri caratteri (non a casaccio, ma non so dire con quale codifica esatta). Un esempio è appunto quello del primo post. Il mio programma vuole leggere questo file di testo e stampare in una pagina html il contenuto dei messaggi. La cosa strana è che se stampo il testo di un messaggio con una System.out.println() gli accenti vengono gestiti in modo corretto. Se invece stampo con un buffered writer su file, questi vengono scritti come sul file di testo originale (cioè sbagliati) e di conseguenza la mia pagina html ha le lettere con accento sbagliate. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
ma hai controllato che il tuo browser non parta usi di default un charset che non sia l'utf?
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2002
Messaggi: 437
|
In effetti avevi ragione...non avevo specificato nel sorgente html che si trattava di un file con codifica utf8
![]() Codice:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xml:lang="it" lang="it" xmlns="http://www.w3.org/1999/xhtml"> |
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
* non ce l'hai messo perché il BOM é uno standard Microsoft; é uno standard piu che sensato ma a quanto pare il resto del mondo non l'ha accettato e quindi il resto del mondo continua ottusamente a confondere i files ASCII, ANSI, Unicode e UTF8. Java fa parte del resto del mondo e quindi i FileWriter di Java non mettono Byte Order Marks. Quote:
1) HTML? nell'HTML i caratteri accentati non si scrivono direttamente, si usano le entities predefinite: "à", "è", ecc. 2) scrivi la pagina in XHTML, non HTML, cosi puoi iniziarla con la seguente linea di codice che specifica anche la codifica: Codice:
<?xml version="1.0" encoding="UTF-8"?> |
||
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Aggiungo che forse, se il tuo problema è quello di decodificare / codificare i caratteri in base alla codifica, e qualora tu conosca la codifica utilizzata dal tuo sistema per i dati, puoi utilizzare CharsetDecoder per convertire l'input in UTF-16 e CharsetEncoder per il contrario.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:47.