gpt4 book ai didi

java - 如何将字节从 128 到 255 映射到等效的 UTF16-LE 代理对

转载 作者:行者123 更新时间:2023-11-30 07:29:24 25 4
gpt4 key购买 nike

我正在努力实现这一目标:

我在 Java Web 服务中有一个 PDF byte[],我必须将它作为 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) 的值我不知道如何获得等效的 2bytes 值;我知道对于字节 156 (9C) 对应的值是 8301 (0x5301),对于字节 224 (E0) 对应的值是 12501 (0x7D01) 但我没能找到一个算法来获取所有其他值。

是否有字节值与对应的UTF-16LE代理对之间的映射表或将值从128映射到255的算法?

提前致谢!

最佳答案

您不需要代理对;它们是用于处理基本多语言平面 (BMP) 之外的字符的构造,所有 windows-1252 字符都在 BMP 中。

官方的windows-1252(别名cp1252)到Unicode的映射表是 http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT它是一个易于处理格式的纯文本文件,因此如果您没有找到用于转换的现有工具,那么根据该文件编写映射应该相当简单。

官方 IANA 注册表中间接引用了该文件: http://www.iana.org/assignments/character-sets

关于java - 如何将字节从 128 到 255 映射到等效的 UTF16-LE 代理对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8534159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com