You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:42:30