Я пытаюсь добиться этого:
У меня есть PDF-байт [] в веб-сервисе java, который я должен отправить в виде строки base64 клиенту .NET, который делает это для восстановления файла.
Encoding.Convert(Encoding.Unicode, Encoding.Default, Convert.FromBase64String(inputJava))
Я не могу изменить код клиента, и сейчас веб-сервис java вызывает другой веб-сервис .NET, который делает это, чтобы превратить байт [] в строку base64:
System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(1252), System.Text.Encoding.Unicode, b);
Помимо base64, который я могу сделать различными способами (например, с помощью org.apache.commons.codec.binary.Base64), я должен превратить исходный байт [] в байт UTF-16LE [] ...
Я пробовал это:
byte[] output = new byte[b.length * 2];
for(int i=0; i < b.length; i++)
{
int val = b[i];
if(val < 0) val += 256;
output[2*i + 0] = (byte) (val);
output[2*i + 1] = 0;
}
Это прекрасно работает для значений ниже 128 (например, для 1 => 0100, 2 => 0200, ..., 127 => 7F00), но для значений выше(128 -> 255) Я не знаю, как получить эквивалентные 2-байтовые значения;Я знаю, что для байта 156 (9C) соответствующее значение равно 8301 (0x5301), а для байта 224 (E0) соответствующее значение равно 12501 (0x7D01), но мне не удалось найти алгоритм для получения всех других значений.
Существует ли таблица отображения между байтовым значением и соответствующей суррогатной парой UTF-16LE или алгоритм для отображения значений от 128 до 255?
Заранее спасибо!