Строка Unicode от Windows. NET до Android Java - PullRequest
0 голосов
/ 04 февраля 2020

Пожалуйста, дайте мне правильный набор функций преобразования в Java для получения правильного результата.

Windows. NET part.

Некоторые строковые данные UNICODE преобразуются в байтовый массив с использованием

Encoding.Unicode.ToBytes(SomeString);

Android Java

byte[] буфер передается в Android Java как есть. Использование new String(byte[], "utf-16") не дает правильную строку. Кто-то сказал, что это из-за большого или малого порядка окончания одного байта символа. Я не уверен, что Unicode. Net и utf-16 одинаковы. Это то же самое?

Существует ли стандартная библиотека, которая отвечает за такое преобразование, или каждый программист должен разработать собственную функцию для преобразования из старшего в младший и т. Д. И т. Д.

исследование показало что дополнительные -1 -2 добавляются в Java. Что означают эти два байта? enter image description here

1 Ответ

1 голос
/ 05 февраля 2020

Дополнительные первые два байта [-1, -2] равны Byte Order Mark (BOM). Подробнее об этом можно прочитать на вики-странице . Вы должны добавить BOM в начале вашего байта []. Я использовал следующий фрагмент кода в C# для преобразования строки в байт [], включая спецификацию.

var result = Encoding.Unicode.GetPreamble().Concat(Encoding.Unicode.GetBytes("Sample Unicode Text")).ToArray();
...