我正在努力实现这一目标:
我在 java Web 服务中有一个 PDF 字节 [],我必须将其作为 base64 字符串发送到 .NET 客户端,该客户端执行此操作以重建文件。
Encoding.Convert(Encoding.Unicode, Encoding.Default, Convert.FromBase64String(inputJava))
我无法更改客户端代码,现在 java web 服务正在调用另一个 .NET web 服务,该服务将 byte[] 转换为 base64 字符串:
System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(1252), System.Text.Encoding.Unicode, b);
除了可以通过各种方式制作的 base64(例如使用 org.apache.commons.codec.binary.Base64)之外,我还必须将原始 byte[] 转换为 UTF-16LE byte[]...
我试过这个:
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 的算法?
提前致谢!