2011-01-17 23 views
5

Ho uno scenario in cui alcuni caratteri speciali sono memorizzati in un database (sybase) nella codifica predefinita del sistema e devo recuperare questi dati e inviarli a una terza parte nella codifica UTF-8 usando un Programma JavaCodifica UTF8 Java

È necessario che i dati inviati a terze parti non superino una dimensione massima definita. Dal momento della conversione in UTF-8 un personaggio può essere sostituito da 2 o 3 caratteri, quindi la mia logica impone che dopo aver ottenuto i dati dal database devo codificarli nella stringa UTF-8 e quindi dividere la stringa. Le seguenti sono le mie osservazioni:

Quando si incontra un carattere speciale come caratteri cinesi o greci o qualsiasi carattere speciale> ASCII 256 e quando lo converto in UTF-8, un singolo carattere può essere rappresentato da più di 1 byte.

Quindi, come posso essere sicuro che la conversione sia corretta? Per la conversione Sto usando il seguente

// storing the data from database into string 
string s = getdata from the database; 

// converting all the data in byte array utf8 encoding 
byte [] b = s.getBytes("UTF-8"); 

// creating a new string as my split logic is based on the string format 

String newString = new String(b,"UTF-8"); 

Ma quando sono uscita questo newString alla console ricevo ? per i caratteri speciali.

Così ho qualche dubbio:

  • Se la mia logica di conversione è sbagliato, quindi come potrei correggerlo.
  • Dopo aver fatto la mia conversione a UTF-8, posso ricontrollare se la mia conversione è OK o no? Voglio dire che è il messaggio corretto che deve essere inviato a terzi, presumo che se il messaggio non è leggibile dall'utente dopo la conversione, allora c'è qualche problema con la conversione.

Vorrei avere alcuni punti di vista da tutti gli esperti là fuori.

Per favore fatemi sapere se ogni ulteriore informazione è necessaria da parte mia.

+3

che sembra essere un problema con la tua console, piuttosto che la conversione, che per quanto posso dire, va bene. Hai provato a scriverlo in un file di testo anziché nella console e aprirlo con un editor di testo? – biziclop

+1

hai provato a trasmettere la stringa originale? Il carattere utilizzato dalla tua console potrebbe non contenere questi caratteri – josefx

+0

L'attività di conversione da unicode a utf-8 e la visualizzazione corretta dei caratteri non è priva di problemi. Un contatto ha trovato una soluzione l'anno scorso. Gli chiederò come è riuscito a farlo funzionare. –

risposta

0

Le stringhe Java sono unicode, ma non tutti i componenti java supportano stringhe unicode complete, in particolare componenti AWT e componenti swing leggeri. Quindi potresti avere delle stringhe perfette, ma ottenere delle cianfrusaglie nell'output della tua console.

0

ringrazia tutti per le vostre risposte ..

come suggerito da alcuni di voi, ho già provato a scrivere in un file di testo, ma in file di testo anche ho ottenuto? per i miei personaggi speciali Quindi ho le seguenti osservazioni: -

a) La codifica è un processo a due piega, per prima cosa cambia la stringa da una codifica ad un'altra codifica a livello di byte e poi devi anche avere il carattere richiesto per il nuovo set di caratteri .

b) Se stiamo codificando una stringa che significa che stiamo codificando i byte, per lo scenario corrente, sto usando le doppie virgolette dalla parola MS e quindi inserendo in un database sybase, e dopo aver recuperato i dati da db , lo sto scrivendo in un file txt, dove sto ottenendo lo stesso? per le doppie virgolette, tuttavia se copio direttamente la stessa roba dalla parola db in MS o modifica più posso vedere i personaggi reali. quindi non sono in grado di comprendere questo problema. Per quanto ne so, durante la codifica dovremmo preoccuparci solo del valore del byte che sono le rappresentazioni reali e non l'oggetto stringa che costituiamo da questi array di byte. Tuttavia, a meno che le mie informazioni codificate non siano leggibili come può l'altra parte convalidare lo legge e lo legge (immagino che questi leggeranno i byte, ma se per un personaggio speciale alcuni?come il personaggio junk è stato introdotto mentre la codifica utf8, quindi non è una perdita di informazioni).

Gradirei davvero le vostre opinioni sulle mie osservazioni e quale approccio corretto dovrei seguire ulteriormente?

+1

il? ti dico solo che il programma che stai usando per visualizzare il tuo testo è anche infelice. Non puoi dire cosa sta realmente accadendo finché non vedi i bit. Utilizzare uno strumento hexdump per visualizzare del testo di esempio. – ddyer

2

Si dice che si sta scrivendo l'Unicode in un file di testo, ma che richiede una conversione da Unicode.

Ma una conversione a cosa? Dipende da come apri il file.

Ad esempio, System.out.println(myUnicodeString) convertirà l'Unicode nella codifica con cui è stato creato System.out, molto probabilmente la codifica predefinita della piattaforma. Se utilizzi Windows, è probabile che sia windows-1252.

Se dite Java per utilizzare codifica UTF-8 quando si scrive in un file, si otterrà un file contenente UTF-8:

PrintWriter pw = new PrintWriter(new FileOutputStream("filename.txt"), "UTF-8"); 
pw.println(myUnicodeString); 
0

Si prega di utilizzare un editor esadecimale per verificare se il tuo output è correttamente formattato UTF8. Non c'è altro modo per dire con certezza se quello che vedi non è correttore.

e leggere questo se si dispone di non pronto: http://www.joelonsoftware.com/articles/Unicode.html

0

Utilizzare questo per una corretta converstion - questo è da iso-8859-1 a UTF-8:

public String to_utf8(String fieldvalue) throws UnsupportedEncodingException{ 

     String fieldvalue_utf8 = new String(fieldvalue.getBytes("ISO-8859-1"), "UTF-8"); 
     return fieldvalue_utf8; 
}