Java 将字符串编码为UCS2

Java 将字符串编码为UCS2,java,Java,我需要将java字符串编码到UCS,比如'h'到'0068' 我有一个测试装置 @Test public void testEncodeAsUCS2_string1() throws Exception { String encoded = sendRequestTransformer.encodeAsUCS2("hello"); Assert.assertEquals("00680065006C006C006F", encoded); } 所以这个测试让我知道转换是否成功,例

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

我有一个测试装置

@Test
public void testEncodeAsUCS2_string1() throws Exception {
    String encoded = sendRequestTransformer.encodeAsUCS2("hello");
    Assert.assertEquals("00680065006C006C006F", encoded);
}
所以这个测试让我知道转换是否成功,例如hello应该返回00680065006C006C006F

在我的代码中,我有以下转换,我知道它在打印时是错误的[B@742cb491.(class对象的此toString方法返回一个字符串,该字符串由对象作为实例的类的名称、at符号字符“@”和对象哈希代码的无符号十六进制表示形式组成)

我需要转换方面的帮助

String encodeAsUcx2(String messageContent){

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

            }

我该怎么做呢?

在您将消息转换为
字节[]
后,您只需循环并将每个
字节
转换为十六进制表示形式,然后在运行过程中构建一个新的
字符串

例如,您可以这样做:

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”


要获得预期的输出,需要使用big-endian编码(
“UTF-16BE”
).

谢谢,这适用于普通英语单词,但我对不同语言中的不同单词有问题。这会导致字母输出为FFFD,用于指示系统何时无法向corect呈现数据流symbol@user3520080你能举个例子吗?你可能正试图这样编码UTF-16不支持mething,需要使用其中一个。您可以使用
标准字符集.UTF_16LE
而不是
“UTF-16LE”