Где вы нашли, что 0x12 - это серьезный ударение? UTF-8 имеет диапазон символов 0x00-0x7F, закодированный так же, как ASCII, а кодовая точка ASCII 0x12 является управляющим символом, DC2 или CTRL+R.
Похоже на какую-то проблему с кодировкой. Самый простой способ решить эту проблему — просмотреть файл, который вы сохранили, в шестнадцатеричном редакторе. Есть несколько вещей, которые нужно проверить:
- метка порядка байтов (BOM) в начале может сбить с толку некоторые анализаторы XML.
- даже несмотря на то, что в объявлении XML указано, что кодировка находится в UTF-8, на самом деле она может не иметь этой кодировки, и файл будет декодирован неправильно.
- не все символы Юникода допустимы в XML, поэтому Firefox отказывается их отображать. В частности, спецификация XML говорит, что 0x9, 0xA и 0xD являются единственными допустимыми символами меньше, чем 0x20, поэтому 0x12 определенно вызовет ворчание соответствующих парсеров.
Если вы можете загрузить файл в pastebin или аналогичный, я могу помочь найти причину и предложить решение.
EDIT: Хорошо, вы не можете загрузить. Это понятно.
XML, который вы получаете, каким-то образом поврежден, и идеальный способ действий — связаться со стороной, ответственной за его создание, чтобы узнать, можно ли решить проблему.
Прежде чем сделать это, нужно проверить одну вещь: вы уверены, что получаете данные в целости и сохранности? Некоторые формы связи (SMS) разрешают использовать только 7-битные символы. Это превратит 0x92 (прямой тик/апостроф ASCII - серьезный ударение?) в 0x12. Похоже на совпадение, особенно если они появляются в файле, где вы ожидаете акцент.
В противном случае вам придется постараться максимально использовать то, что у вас есть:
хотя это и не обязательно, будьте осторожны и передайте «UTF-8» в качестве второго параметра для setInput
в синтаксическом анализаторе.
аналогичным образом заставьте синтаксический анализатор использовать другую кодировку символов, передав другую кодировку в качестве второго параметра. Кодировки, которые можно попробовать в дополнение к «UTF-8», — это «iso-8859-1» и «UTF-16». Полный список поддерживаемых кодировок для java приведен на странице Sun site – вы можете попробовать все это. (Я не смог найти полный список поддерживаемых кодировок для Android.)
В крайнем случае вы можете удалить недопустимые символы, например. удалите все символы ниже 0x20, которые не являются пробелами (0x9,0xA и 0xD - все пробелы). Если удалить их сложно, вы можете вместо этого заменить их.
Например
class ReplacingInputStream extends FilterInputStream
{
public int read() throws IOException
{
int read = super.read();
if (read!=-1 && read<0x20 && !(read==0x9 || read==0xA || read==0xB))
read = 0x20;
return read;
}
}
Вы оборачиваете его вокруг существующего входного потока, и он отфильтровывает недопустимые символы. Обратите внимание, что вы легко можете нанести больше вреда XML или получить бессмысленный XML, но в равной степени это может позволить вам получить нужные вам данные или более легко увидеть, в чем заключаются проблемы.
person
mdma
schedule
24.05.2010