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

Java读取文本文件后如何将字符串转换为对应十六进制值?

解决方案

要实现你需要的字符串转对应编码十六进制的功能,核心是先把字符串按读取时的编码转回字节数组(因为Java中String是Unicode编码,直接取字符的十六进制会得到Unicode码点,而非文件存储的原始编码字节),再将每个字节转换为两位十六进制字符串并拼接。

实现toHex方法

以下是适配你需求的方法,支持传入指定编码:

private static String toHex(String str, Charset charset) {
    StringBuilder hexBuilder = new StringBuilder();
    byte[] rawBytes = str.getBytes(charset);
    
    for (byte b : rawBytes) {
        // 将有符号byte转为无符号整数,避免负数显示异常
        int unsignedByte = b & 0xFF;
        // 格式化为两位大写十六进制
        String hexStr = String.format("%02X", unsignedByte);
        hexBuilder.append(hexStr).append(" ");
    }
    
    // 移除末尾多余的空格
    if (hexBuilder.length() > 0) {
        hexBuilder.deleteCharAt(hexBuilder.length() - 1);
    }
    return hexBuilder.toString();
}

修改原有调用代码

在你的读取循环中,把inputCharset作为参数传入toHex方法:

Charset inputCharset = Charset.forName("ISO-8859-1");
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fi), inputCharset));
while (in.ready()) {
    String row = in.readLine();
    // 传入编码参数
    System.out.println(row + " = " + toHex(row, inputCharset));
}

效果验证

对于你示例中的第一行äpple,用ISO-8859-1编码转换后,字节数组为[0xE4, 0x70, 0x70, 0x6C, 0x65],最终输出会符合你的预期:

äpple = E4 70 70 6C 65

内容的提问来源于stack exchange,提问作者user6625547

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:15:07