PDA

View Full Version : [java/generale] pulire stringa esadecimale(sembra)


ndakota
29-04-2010, 08:57
Ciao ragazzi, ho un problema. Mi invio da solo una mail tramite outlook e la ricevo programmaticamente da socket tramite java. Ora, vi faccio qualche esempio di quello che mando e quello che ricevo:

"prova" --> "prova" //BENE!

"è é ì à ò ù" --> "6CDpIOwg4CDyIPkNCg=="

"è é ì à ò ù èèè" --> "6CDpIOwg4CDyIPkg6OjoDQo="

:cry: :cry:

Ho notato che outlook se metto solo caratteri a 128 bit usa il charset "us-ascii", altrimenti "iso-8859-1". Ma questo in ogni caso non cambia le cose. Ricevo sempre quella codifica esadecimale(sembra). Ho guardato non so quante tabelle dell'iso-8859 ma non mi ci ritrovo. Qualcuno riesce ad aiutarmi?

shinya
29-04-2010, 09:03
Più che esadecimale direi base64...

ndakota
29-04-2010, 09:19
Base64? Non mi pare di averlo mai visto nelle tabelle che ho trovato finora. Ne conosci qualcuna?

shinya
29-04-2010, 09:36
Stai facendo confusione.

L'encoding base64 lavora su una sequenza di byte. Le meccaniche di outlook e del tuo programma che legge dal socket mi sono oscure, ma quello che avviene nei tuoi esempi sembra sia qualcosa di simile:

- se la stringa contiene solo caratteri rappresentabili dal charset us-ascii -> nessuna conversione.
- altrimenti converti in binario (secondo l'encoding di default del sistema mi vien da dire, ma chi lo sa...) e poi in base64.

http://en.wikipedia.org/wiki/Base64

ndakota
29-04-2010, 09:44
Guarda quest'altra:

"Prova è solo per noi di lunedì" --> "Prova =E8 solo per noi di luned=EC"

La cosa che mi perplime è che la e accentata qua sembra rappresentata diversamente che non negli esempi di prima :cry:

shinya
29-04-2010, 11:09
Guarda quest'altra:

"Prova è solo per noi di lunedì" --> "Prova =E8 solo per noi di luned=EC"

La cosa che mi perplime è che la e accentata qua sembra rappresentata diversamente che non negli esempi di prima :cry:

Boh... a me sembra che tu ed outlook usiate due encoding diversi. Puoi postare un pò di codice?

ndakota
29-04-2010, 13:42
Penso non ce ne sia più bisogno. Non mi ero accorto che tra gli attributi,che mi sparava fuori della mail, c'è anche un content-transfer-encoding che ha come valore nei tre casi qualcosa del tipo:

- 7bit
- Base64
- quoted-printable

Quindi adesso posso distinguere i casi: nel primo non faccio nulla, nel secondo dovrò trovare un modo di passare da base64 a stringa normale e nel terzo(è l'ultimo esempio che ho postato), su cui mi sto concentrando ora, non faccio altro che cambiare gli esadecimali nei caratteri accentati corrispondenti.

Ti ringrazio :)