我需要将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());
}
我该怎么做?
答案 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"
)。