Mit UTF-8-Codierung
Wir haben eine Java-Anwendung läuft auf Weblogic server nimmt XML-messages vom JMS-oder MQ-queue und schreibt Sie in eine andere JMS-queue ein. Die Anwendung nicht, ändern Sie die XML-Inhalte in keiner Weise. Wir verwenden BEA XMLObject zum Lesen und schreiben der Nachrichten in Warteschlangen.
Die XML-Nachrichten enthalten die encoding-Typ-Deklarationen als UTF-8.
Wir haben ein Problem, wenn die XML-Zeichen enthält, aus der Seite des normalen ASCII-Bereich (wie £ - symbol zum Beispiel). Beim Lesen der Nachricht aus der Warteschlange können wir sehen, dass das £ - symbol ist intakt, aber einmal schreiben wir es auf die Ziel-queue, das £ - symbol ist verloren und wird ersetzt durch £ statt.
Ich habe die OS-level-Einstellungen (locale) und alles scheint in Ordnung zu sein. Was sollte ich sonst noch überprüfen werden, um sicherzustellen, dass dies nicht passiert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass mir sagt, der Charakter wird geschrieben als UTF-8, aber es wird Lesen, als wäre es in einer single-byte Kodierung wie ISO-8859-1. (Für ein beliebiges Zeichen im Bereich U+geschützte Leerzeichen 00A0..U+00BF, wenn der Kodierung als UTF-8 und entschlüsseln, es als ISO-8859-1, den Sie am Ende mit der zwei-Zeichen-Sequenz
ÃX
, woX
ist der ursprüngliche Charakter.) Ich würde schauen das encoding-Einstellungen der Empfang von JMS-queue ein.U+0080..U+00FF
, das zweite byte der UTF-8-Codierung ist die gleiche wie der code mit den beiden high-order-bits überschrieben mit10
. Aber diejenigen, die im BereichU+0080..U+00BF
beginnen bereits mit10
, so dass das zweite byte ist der gleiche wie der code point. Das ist, warum, wenn Sie Sie entschlüsseln, falsch es sieht aus wie jemand, HinzugefügtÃ
vor einigen Ihrer Charaktere.Sollten Sie verwenden
InputStream
,OutputStream
, undbyte[]
um die XML-Dokumente, die nichtReader
,Writer
, undString
. In der Welt der JMS,BytesMessage
ist eine bessere Passform für XML-Nutzlasten alsTextMessage
.Jedes XML-Dokument gibt an, seine Zeichencodierung intern, und alle XML-Verarbeitungs-APIs orientiert sind, nehmen byte-streams und, wo notwendig, herauszufinden, die richtige Zeichenkodierung zu nutzen, sich. Die text-basierte APIs sind nur dazu da... um Leute zu verwirren, denke ich! Trotzdem sollten Anwendungen lassen Sie den XML-Prozessor befassen sich mit character-encoding-Probleme, anstatt zu versuchen, Sie zu verwalten sich selbst (oder mit einem text-orientierten API ohne ein solides Verständnis von character-encoding-Probleme).
Ohne ein paar mehr Besonderheiten, Schätze ich, dass es eine Methode, nimmt Optional eine Kodierung, irgendwo, die nicht angegeben und ist standardmäßig auf ISO-8859-1. Allgemein, nichts überprüfen, die vergeht zwischen einem InputStream/Ausgabestrom und eine Reader/Writer.
Beispielsweise ein OutputStreamWriter nimmt eine optionale Kodierung sein, dass Sie vielleicht weglassen.