首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASCII to UCS2编码java代码

ASCII to UCS2编码java代码
EN

Stack Overflow用户
提问于 2014-01-03 14:40:15
回答 2查看 8K关注 0票数 1

我需要将字符串(通常是ASCII字符集)转换为UCS2字符集,然后需要转换为Base64。

我可以找到Base64转换的代码,但面临着编码到UCS2的问题。如果在java中提供将字符串转换为UCS2字符集的帮助,那将是非常有帮助的。

谢谢,

EN

回答 2

Stack Overflow用户

发布于 2014-01-03 15:58:14

当您将数据读入String变量时,内部表示形式已经是unicode,但是当您执行mystring.getBytes()操作时,返回的字节将是由当前平台的默认编码编码的字符串。

如果您想要获得UTF-16 (基本上与UCS-2 (也称为ISO 10646)相同,请参阅here)使用

代码语言:javascript
复制
mystring.getBytes("UTF-16").
票数 3
EN

Stack Overflow用户

发布于 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标签):

代码语言:javascript
复制
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()的无异常抛出的替代品。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20898074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档