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