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
相关产品推荐
相关产品推荐

