Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Endoding di un InputStream

    Buongiorno,

    ho un problema di encoding nel mio progetto.

    Sto sviluppando un proxy, ricevo da remoto dei files .xml.

    Alcuni di questi hanno codifica UTF-8 (il tipo di codifica che io intendo restituire al client).

    Altri, codifica diversa (ISO-8859-1).

    L'xml restituito da remoto viene convertito in json a partire dall inputStream della risposta http in questo modo.

    codice:
    JSON json = new XMLSerializer().readFromStream(res.getEntity().getContent());
    In particolare,

    codice:
    res.getEntity().getContent()
    restituisce, come detto, l'inputStream della risposta.

    Vorrei semplicemente poter specificare la codifica dell'inputStream, in modo che il json ottenuto dall'xml risulti correttamente visualizzato nel mio client che usa come codifica standard UTF-8.

    Nello specifico, senza poter modificare il charset, il client (UTF-8) non visualizza correttamente i caratteri speciali e accentati nel caso in cui l'xml remoto abbia codifica ISO.


    Buona giornata,

    Adriano.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Guardando un po' le API di JSON, non ho trovato niente per specificare le codifiche eventuali... però dal source code

    http://www.jarvana.com/jarvana/view/...java?format=ok

    alla fine viene utilizzato XMLSerializer.read(String xml) nel metodo XMLSerializer.readFromStream... ergo, pensi che possa funzionare una cosa del genere? ottieni il contenuto dell' InputStream, applichi l'eventuale conversione (guarda in java.nio.charset) e crei il tuo JSON da XMLSerializer.read(String xml_codificata)

    non sarà elegante come la soluzione su unica riga, ma se serve al tuo scopo che importa?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Effettivamente questa soluzione l'avevo trovata... Ma credo funzioni per pura fortuna.

    codice:
    EntityUtils.toString(res.getEntity()
    In questo modo ottengo una stringa rappresentante il flussi di byte ricevuto dal server.

    codice:
    new String(EntityUtils.toString(res.getEntity()).getBytes("UTF-8")))
    Così creo una nuova String, specificando la codifica a UTF-8.

    Poi la passo in pasto all'XMLSerializer con il metodo 'read' che prende in input una String...

    E funziona...

    Ma mi chiedo come faccia!!!

    L'XMLSerializer DEVE tener conto dell'encoding che legge nell'intestazione dell'xml stesso. Quindi mi immagino che il JSON ottenuto dalla serializzazione abbia un flusso di byte che tiene conto dell'encoding dell'xml di origine.

    Se trova ISO-8859-1, vuol dire che l'xml è formattato con quel charset (la 'è' corrisponderà a f1, per esempio).

    Se trova UTF-8, vuol dire che l'xml è formattato con quel charset (la 'è' corrisponderà a e3 32).

    Se forzo l'encoding da ISO a UTF, non credo di ottenere qualcosa di concreto nella decodifica...

    Eppure va bene....


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.