我需要将字符串(通常是ASCII字符集)转换为UCS2字符集,然后需要转换为Base64。
我可以找到Base64转换的代码,但面临着编码到UCS2的问题。如果在java中提供将字符串转换为UCS2字符集的帮助,那将是非常有帮助的。
谢谢,
发布于 2014-01-03 15:58:14
当您将数据读入String变量时,内部表示形式已经是unicode,但是当您执行mystring.getBytes()操作时,返回的字节将是由当前平台的默认编码编码的字符串。
如果您想要获得UTF-16 (基本上与UCS-2 (也称为ISO 10646)相同,请参阅here)使用
mystring.getBytes("UTF-16").发布于 2015-10-01 00:51:39
我最初使用getBytes("UTF-16")作为mentionned by @piet.t,但在处理UCS2时需要考虑一些注意事项:它将每个字符恰好编码为两个字节(请参阅complete code chart),并且不使用任何物料清单。getBytes("UTF-16")增加了一个2字节的BOM 0xfeff,编码时要去掉,解码时再加回去。
我还注意到在解码过程中最后一个字节应该被丢弃(但我主要是用ASCII编码,用其他字符代码这样做可能是错误的)
编辑:在@jtahlborn关于使用UTF-16BE的提示之后,我最终使用了UTF-16LE (它不会产生任何物料清单,甚至不会产生UTF-16BE提供的额外0 )和以下两种编码/解码方法,它们在我的用例中工作得很好(添加XP TIFF标签):
public static byte[] encodeUCS2(String s) {
try {
return s.getBytes("UTF-16LE");
} catch (UnsupportedEncodingException e) {
return new byte[]{};
}
}
public static String decodeUCS2(byte[] e) {
try {
return new String(e, "UTF-16LE");
} catch (UnsupportedEncodingException e1) {
return null;
}
}请注意,在这种情况下,不太需要特定的编码/解码方法,因为它们是getBytes()/new String()的无异常抛出的替代品。
https://stackoverflow.com/questions/20898074
复制相似问题