首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串编码为UCS2

将字符串编码为UCS2
EN

Stack Overflow用户
提问于 2015-10-16 02:30:04
回答 1查看 2.7K关注 0票数 1

我需要将java字符串编码为UCS,如'h‘到'0068’

例如:我有一个测试设置

代码语言:javascript
复制
@Test
public void testEncodeAsUCS2_string1() throws Exception {
    String encoded = sendRequestTransformer.encodeAsUCS2("hello");
    Assert.assertEquals("00680065006C006C006F", encoded);
}

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

在我的代码中,我有以下转换,我知道这是错误的,因为它打印[B@742cb491。(类Object的此toString方法返回一个字符串,该字符串由该对象所属类的名称、at符号字符‘@’和该对象的哈希码的无符号十六进制表示形式组成)

我需要帮助来完成转换

代码语言:javascript
复制
String encodeAsUcx2(String messageContent){

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

            }

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2015-10-16 03:00:56

在将消息转换为byte[]之后,您只需遍历每个byte并将其转换为十六进制表示,然后构建一个新的String

例如,您可以这样做:

代码语言:javascript
复制
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();
}

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

要获得预期的输出,需要使用大端编码("UTF-16BE")。

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

https://stackoverflow.com/questions/33155916

复制
相关文章

相似问题

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