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

    [XSLT] Errore lettere accentate

    Salve,

    attraverso la libreria xalan e l'xslt trasformo un file xml in txt, ma purtroppo le lettere accentate del testo mi danno problemi.
    Ho usato la codifica UTF-8 ed ho salvato i file xml ed xmlt come UTF-8 in notepad...ma niente

    In breve ecco il metodo per la trasformazione
    Codice PHP:
    public void transform(String sourceString stylesheetString output)
        
    throws [...] {

            
    TransformerFactory tFactory TransformerFactory.newInstance();
        
    Transformer transformer tFactory.newTransformer(new StreamSource(
            
    stylesheet));
        
    transformer.transform(new StreamSource(source), new StreamResult(
            new 
    FileOutputStream(output)));        

    Questo è il file xml (l'ho abbreviato):
    Codice PHP:
    <?xml version="1.0" encoding="UTF-8"?>
    <messaggio>
        Questo  è il contenuto del messaggio, perciò spero funzioni. 
        perciò questa è una e congiunzione, questa è una e verbo. 
    </messaggio>
    Questo il file xslt:
    Codice PHP:
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
        
        <xsl:template match="/">
        <xsl:apply-templates/>
         </xsl:template>
        
         <xsl:template match="messaggio">
         <xsl:value-of select="."/>
         </xsl:template>

    </xsl:stylesheet>
    ...e questo è il mio risultato
    Codice PHP:
    Questo  Ã¨ il contenuto del messaggioperciò spero funzioni
    perciò questa Ã¨ una e congiunzionequesta Ã¨ una e verbo
    Qualche anima pia che sa come risolvere?

    Grazie dell'attenzione,
    Matteo
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [XSLT] Errore lettere accentate

    Originariamente inviato da matthew80
    ...e questo è il mio risultato
    Codice PHP:
    Questo  Ã¨ il contenuto del messaggioperciò spero funzioni
    perciò questa Ã¨ una e congiunzionequesta Ã¨ una e verbo
    È UTF-8!!. Quindi se il documento di output non lo vuoi in UTF-8 ... allora quale charset vuoi???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ops...
    Io lo vorrei "normale", cioè con le lettere accentate:
    Codice PHP:
    Questo  è il contenuto del messaggioperciò spero funzioni.
    perciò questa è una e congiunzionequesta è una e verbo
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da matthew80
    Io lo vorrei "normale", cioè con le lettere accentate:
    E io ripeto la domanda: con quale charset?? ISO-8859-1?? Windows-1252 (che è un superset del ISO-8859-1)?? CP-850? Altro?

    Dove devi visualizzarlo/usarlo questo documento??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Questo documento devo essere letto da un programma di TTS. Quindi il testo sarà convertito in voce e le lettere accentate devono essere lette come lettere accentate, ecc....insomma io voglio che quello che sta scritto nel file XML sia identico a quello che sta scritto nel file TXT.
    Il file TXT infatti sarà passato così com'è al server vocale TTS.
    In realtà la mia conversione del file XML è più complessa, ma nel forum ho semplificato per non tediare chi legge, ma la sostanza è la stessa.
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da matthew80
    insomma io voglio che quello che sta scritto nel file XML sia identico a quello che sta scritto nel file TXT.
    Ehm ... forse non ti è chiara la questione dei charset. È inutile dire che il testo lo vuoi "normale" (che già non ha senso ... che vuol dire?) o che lo vuoi "identico".

    Bisogna stabilire un charset. Se il documento fosse da visualizzare su un editor grafico di Windows, allora è appropriato il charset Windows-1252 o al massimo ISO-8859-1. Se il documento fosse da visualizzare con l'Edit in una console, allora bisogna vedere quale è il charset usato nella console. Almeno qui in Italia (e in altri paesi dell'Europa), la console generalmente usa il charset CP-850.

    La 'è' si codifica con:
    - 8Ah in CP-850
    - E8h in ISO-8859-1 / Windows-1252
    - C3h A8h in UTF-8
    ecc...

    Insomma ... cambia! E se lo scrivi in CP-850, lo vedi correttamente con l'Edit in una console ma non lo vedi correttamente con Notepad. E viceversa, se lo scrivi in Windows-1252, lo vedi bene con Notepad ma non con l'Edit.

    Originariamente inviato da matthew80
    Il file TXT infatti sarà passato così com'è al server vocale TTS.
    E allora devi andare a vedere la documentazione di questo TTS per capire se si aspetta il testo in un qualche charset specifico o se lo puoi configurare/specificare tu in qualche modo!

    Una volta che hai capito in quale charset devi/puoi generare il documento di output, allora metti, es.:

    <xslutput method="text" encoding="ISO-8859-1"/>

    Punto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Grazie andbin,

    anche se non ho ancora risolto, almeno sto capendo qualcosa...
    Allora, poniamo che questo file TXT che genero lo devo leggere con il notepad.
    Se creo un file XML come questo:
    Codice PHP:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <messaggio>
        Questo  &egrave; ...
    </messaggio>
    ed il file XSLT:
    Codice PHP:
    <?xml version="1.0"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="ISO-8859-1"/>    
        [...]
    </xsl:stylesheet>
    Poi non mi crea più il file TXT e nel fare la trasformazione mi ritrovo questo errore:
    Codice PHP:
    [Fatal Errordocumento.xml:3:21The entity "egrave" was referencedbut not declared
    Insomma che dovrei scrivere nell'XML al posto di &egrave;? Tu hai detto E8h ma non ho trovato nessun esempio che parlasse di E8h.
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  8. #8
    Sorry

    Se nel file XML scrivo
    Codice PHP:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <messaggio>
        Questo  è ...
    </messaggio>
    e nel file XSLT
    Codice PHP:
    <?xml version="1.0"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="ISO-8859-1"/>
        [...]
    </xsl:stylesheet>
    Lo leggo tranquillamente. Volendo posso anche passargli codici come ad esempio 233 per la é.

    Ora faccio qualche altra prova e ti faccio sapere.
    Super grazie
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da matthew80
    Se creo un file XML come questo:
    Codice PHP:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <messaggio>
        Questo  &egrave; ...
    </messaggio>
    Eh no. Intanto il documento XML lo puoi scrivere nel charset che ti pare. Non deve per forza essere uguale al charset da usare per il documento di output!!!

    Poi mi sembra ovvio che se scrivi il documento XML ad esempio in UTF-8 ma l'output lo fai in ISO-8859-1, devi stare attento a non scrivere caratteri che poi non sono rappresentabili in ISO-8859-1.
    Con UTF-8 puoi rappresentare tutti i code point Unicode. Con ISO-8859-1 (e altri charset single-byte) no, ovviamente.

    In XML non ci sono le entità & egrave; ecc... predefinite. Se si vuole si possono dichiarare delle entità ma è da fare in modo esplicito (e non so quanto ti possa essere utile).

    Quindi non mettere le entità HTML! Non so con quale editor scrivi il documento XML ma l'editor un charset lo usa, è chiaro. Scrivi i caratteri speciali normalmente, tramite tastiera se hai la italiana ha il tasto con la "è", e metti nel encoding="..." del file XML lo stesso charset usato dall'editor.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.