В Java я пытаюсь преобразовать байт массива (byte[]
) XML в строку с помощью:Преобразование массива байтов (байт []) в строку меняет один специальный символ
String output = new String(myXMLbyteArray, "UTF-8");
Это успешно, за исключением одного особый характер, острый апостроф. При сравнении входных и выходных данных в шестнадцатеричном у меня есть это:
Например:
40
становится40 00
55
становится55 00
Но особый характер 92
становится 19 20
вместо 92 00
,
Как я могу исправить это элегантно? Я попробовал как конструктор String по умолчанию, так и другие кодировки без везения.
Можете ли вы дать более четкий пример того, что вы делаете, потому что '92' становится' 19 20' не имеет смысла, а не '92 00' Например, с UTF-8 и большинством кодировок' 40' становится '40 'т.е. это ASCII и не изменен. –
Когда я открываю входной текст (byte []) с шестнадцатеричным редактором, например, у символа есть шестнадцатеричное значение 55. Когда я открываю выходной текст (String), этот символ теперь имеет значение 55 00, так как символ в Java - 2 байта. Вот почему вы ожидали бы, что 92 станет 92 00, однако оно станет 19 20, что является другим (недопустимым) символом. – user2381303
55 все еще 55, но на самом деле это 0055, порядок байтов - это аппаратная деталь, не указанная Java. То, что 92 переведено, зависит от вашей кодировки. Это может быть 0092, если вы используете ISO-8859-1, но если вы используете UTF-8, это начало многобайтового символа, поэтому ему нужно посмотреть на следующий символ, чтобы превратить его в один символ. –