Как получить «оригинальные» байты строки Java при чтении из DataOutputStream.writeUTF ()? - PullRequest
1 голос
/ 27 декабря 2011

В настоящее время я передаю String по сети, используя DataInput / OutputStream's. Строка, которую я передаю, должна быть преобразована в байтовый массив для расшифровки.

Однако, поскольку, когда строка была написана с использованием DataOutputStream.writeUTF ("foobar"), ее байтовый массив содержит закодированные данные Java Modified UTF-8, которые заполняют процесс шифрования.

Как я могу получить исходные байты из модифицированной Java строки UTF-8?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

Что если вы напишите свою строку как byte [] и прочитаете ее как byte [], используя http://docs.oracle.com/javase/1.4.2/docs/api/java/io/DataOutputStream.html#write(byte[], int, int)

0 голосов
/ 27 декабря 2011

Unicode имеет несколько вариантов, где s-with- ^ может быть либо одним символом, либо двумя: s плюс комбинация- ^ В Java есть класс Normalizer для преобразования в один конкретный вариант. Смотри http://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html или сразу посмотрите на API.

Для этого требуется, чтобы исходная строка соответствовала одному варианту. Нельзя брать байты, а затем интерпретировать их как UTF-8, потому что существуют недопустимые последовательности. Это было сделано для предотвращения распознавания неправильного байта / символа в середине последовательности байтов.

String normalizedString = Normalizer.normalize(s, Normalizer.Form.NFD);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...