将字符串编码为UCS2

时间:2015-10-15 18:30:04

标签: java

我需要将java字符串编码为UCS,例如' h'至' 0068'

例如。我有一个测试设置

@Test
public void testEncodeAsUCS2_string1() throws Exception {
    String encoded = sendRequestTransformer.encodeAsUCS2("hello");
    Assert.assertEquals("00680065006C006C006F", encoded);
}

所以这个测试让我知道转换是否成功,例如。你好应该返回00680065006C006C006F

在我的代码中,我有以下转换,我知道它打印错误[B @ 742cb491。 (Object类的toString方法返回一个字符串,该字符串包含对象是实例的类的名称,at符号字符`@',以及对象的哈希码的无符号十六进制表示形式)

我需要转化帮助

String encodeAsUcx2(String messageContent){

                            try {
                                            messageContent.getBytes("UTF-16LE");
                            } catch (UnsupportedEncodingException e) {
                                            e.printStackTrace();
                            }
                            return String.valueOf(messageContent.getBytes());

            }

我该怎么做?

1 个答案:

答案 0 :(得分:1)

将邮件转换为byte[]后,您只需循环并将每个byte转换为十六进制表示形式,然后构建新的String

例如,您可以这样做:

static String encodeAsUcs2(String messageContent) throws UnsupportedEncodingException {
    byte[] bytes = messageContent.getBytes("UTF-16LE");

    StringBuilder sb = new StringBuilder();
    for (byte b : bytes) {
        sb.append(String.format("%02X", b));
    }

    return sb.toString();
}

但是,我应该注意,在编码"680065006C006C006F00"时,这将返回"00680065006C006C006F",而不是"hello"

要获得您期望的输出,您需要使用big-endian编码("UTF-16BE")。