У меня UTF-8, но я все равно получаю «Недопустимый байт 1 в однобайтовой последовательности UTF-8»

Я создаю XML-строку на лету (НЕ при чтении из файла). Затем я использую Cocoon 3, чтобы преобразовать его через FOP в PDF. Где-то посередине бежит Ксерс. Когда я использую жестко запрограммированные вещи, все работает. Как только я помещаю немецкий умлаут в базу данных и обогащаю свой xml этими данными, я получаю:

Caused by: org.apache.cocoon.pipeline.ProcessingException: Can't parse the XML string.
at org.apache.cocoon.sax.component.XMLGenerator$StringGenerator.execute(XMLGenerator.java:326)
at org.apache.cocoon.sax.component.XMLGenerator.execute(XMLGenerator.java:104)
at org.apache.cocoon.pipeline.AbstractPipeline.invokeStarter(AbstractPipeline.java:146)
at org.apache.cocoon.pipeline.AbstractPipeline.execute(AbstractPipeline.java:76)
at de.grobmeier.tab.webapp.modules.documents.InvoicePipeline.generateInvoice(InvoicePipeline.java:74)
... 87 more

Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684)
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:554)

Затем я отладил свое приложение и обнаружил, что мой «Ä» (который поступает из базы данных) имеет байтовое значение 196, то есть C4 в шестнадцатеричной системе. Вот что я ожидал, исходя из этого: http://www.utf8-zeichentabelle.de/

Я не знаю, почему мой код не работает.

Затем я попытался добавить спецификацию вручную, вот так:

byte[] bom = new byte[3];
bom[0] = (byte) 0xEF;
bom[1] = (byte) 0xBB;
bom[2] = (byte) 0xBF;
String myString = new String(bom) + inputString;

Я знаю, что это не совсем хорошо, но я пробовал - конечно, не удалось. Я попытался добавить впереди xml-заголовок:


Что тоже не удалось. Потом совмещал. Не смогли.

В конце концов, я пробовал что-то вроде этого:

xmlInput = new String(xmlInput.getBytes("UTF8"), "UTF8");

Фактически ничего не делает, потому что это уже UTF-8. Тем не менее это не удается.

Итак ... есть идеи, что я делаю неправильно и чего от меня ждет Ксерс?

Спасибо Christian

6
задан Christian 12 December 2011 в 08:52
поделиться