PDA

View Full Version : [JAVA]Parsing di una particolare stringa


Frank1962
22-01-2007, 00:42
Salve, sto scrivendo un metodo che preso in input una stringa formattata in una particolare maniera mi resituisca come risultato la stringa codificata... la regolare di formattazione "particolare" è:


=? <Charset> ? Q|B ? <Text> ?=


dove Charset è l'informazione aggiuntiva con la quale dovrei codificare il Text della stringa.
Per dovere di cronaca questo è il modo in cui nei messaggi di news della rete usenet si può scrivere nell'header con un charset che non sia l'US-ASCII, esempio: http://groups.google.it/group/it.test/msg/e87004e2588932b3?dmode=source&hl=it, vedete l'author del messaggio com'è formattato?
come faccio a scrivere un'espressione regolare per far digerire questa roba al java?

ciao e grazie per un eventuale interessamento ;)

andbin
22-01-2007, 10:06
Salve, sto scrivendo un metodo che preso in input una stringa formattata in una particolare maniera mi resituisca come risultato la stringa codificata... la regolare di formattazione "particolare" è:


=? <Charset> ? Q|B ? <Text> ?=

Per le specifiche relative a questo particolare formato, vedere la RFC 2047: http://www.faqs.org/rfcs/rfc2047.html

Puoi certamente scrivere tu un metodo per gestire la codifica/decodifica di questo formato, sebbene non sia proprio banalissimo (è bene che ti leggi tutte le specifiche).
Ma se ne hai possibilità, credo che sia molto meglio utilizzare la libreria JavaMail (http://java.sun.com/products/javamail/) che ha una classe MimeUtility che contiene dei metodi appositi per fare queste conversioni.

Frank1962
22-01-2007, 10:58
Per le specifiche relative a questo particolare formato, vedere la RFC 2047....
Ho provato a utilizzare questa classe ma sono riuscito solo a decodificare il quoted printable, per il charset invece non ho capito come devo fare :(

andbin
22-01-2007, 11:08
Ho provato a utilizzare questa classe ma sono riuscito solo a decodificare il quoted printable, per il charset invece non ho capito come devo fare :(Hai provato così?
String inp = "=?iso-8859-1?q?Quello_che_rovina_i_thread_pi=F9_lunghi_del_mondo?=";

String out = MimeUtility.decodeText (inp);

Frank1962
22-01-2007, 11:18
Hai provato così?
String inp = "=?iso-8859-1?q?Quello_che_rovina_i_thread_pi=F9_lunghi_del_mondo?=";

String out = MimeUtility.decodeText (inp);
adesso si funziona ....il problema è che devo andare a togliere la mail finale dall'author del messaggio: e come faccio? ...non potrebbe darsi che il mime voglia codificare con altro charset pure l'indirizzo mail? ...e in questo caso come distinguo i due casi se poi come regola splitto la stringa dell'author 'author.split(" ")' per ottenere autore e mail: non esiste per caso qualche altra classe java che mi permette di formattare anche l'author di un messaggio ottenendo l'autore e la mail "lisci" senza fronzoli di apici e mime? (o forse chiedo troppo dalle librerie java? :D)

andbin
22-01-2007, 11:30
adesso si funziona ....il problema è che devo andare a togliere la mail finale dall'author del messaggio: e come faccio? ...non potrebbe darsi che il mime voglia codificare con altro charset pure l'indirizzo mail? ...e in questo caso come distinguo i due casi se poi come regola splitto la stringa dell'author 'author.split(" ")' per ottenere autore e mail: non esiste per caso qualche altra classe java che mi permette di formattare anche l'author di un messaggio ottenendo l'autore e la mail "lisci" senza fronzoli di apici e mime? (o forse chiedo troppo dalle librerie java? :D)Esempio:
String inp = "\"=?iso-8859-1?q?Quello_che_rovina_i_thread_pi=F9_lunghi_del_mondo?=\" <[email protected]>";

InternetAddress iaddr = new InternetAddress (inp);

String nome = iaddr.getPersonal ();
String indirizzo = iaddr.getAddress ();