Java如何实现字符串UTF-16编码并输出对应十六进制序列
实现方案
Java 标准库原生提供UTF-16系列字符集的编码能力,无需引入第三方依赖即可实现需求。
你期望的输出是无BOM的大端序UTF-16编码结果,对应Java中的StandardCharsets.UTF_16BE字符集。如果直接使用StandardCharsets.UTF_16,编码结果开头会额外生成2字节的BOM标记(0xFEFF),不符合输出要求。
完整实现代码
import java.nio.charset.StandardCharsets; public class Utf16Encoder { public static void main(String[] args) { String x = "test"; byte[] utf16Bytes = x.getBytes(StandardCharsets.UTF_16BE); StringBuilder output = new StringBuilder(); for (int i = 0; i < utf16Bytes.length; i += 2) { // 每2个字节组合为4位十六进制,不足两位自动补前导0 String hexSegment = String.format("%02X%02X", utf16Bytes[i], utf16Bytes[i+1]); output.append(hexSegment); // 非最后一个分段则追加空格分隔 if (i < utf16Bytes.length - 2) { output.append(" "); } } System.out.println(output); } }
逻辑说明
- 调用字符串
getBytes(Charset)方法完成编码,指定UTF_16BE保证编码结果和预期的十六进制序列完全一致 - UTF-16编码的每个码元占2字节,因此遍历字节数组时步长设为2,每两个字节拼接为一个4位十六进制段
- 格式化时使用
%02X占位符,确保字节值小于0x10时自动补前导0,避免出现长度不足的格式错误 - 仅在分段之间追加空格,避免输出末尾出现多余空格
运行结果
执行代码后控制台输出如下,完全匹配你的需求:
0074 0065 0073 0074
补充:该逻辑对Unicode辅助平面字符(如emoji、CJK扩展区生僻字等,UTF-16下占4字节即2个码元)同样生效,无需额外调整即可输出正确的编码序列。
内容的提问来源于stack exchange,提问作者rati pirtskhalaishvili
相关产品推荐
相关产品推荐

