二进制转文本转换异常问题求助
二进制转文本出乱码?一步步帮你搞定!
嘿,看你踩了二进制转文本的坑——明明预期是干净的"FRI",结果出来一堆杂符号,这确实闹心。我来帮你拆解下可能的问题,再给你靠谱的解决办法!
最可能的几个问题点:
- 用错了文件读取方式:从你给出的代码开头看,大概率是用了
FileReader这类字符流来读二进制文件?字符流会默认按系统编码去解析字节,把二进制数据直接当成字符处理,不出乱码才怪!二进制数据必须用字节流(比如FileInputStream)读取。 - 编码格式不匹配:转字符串时指定的编码,和生成二进制数据时用的编码对不上。比如原数据是ASCII编码的,你转的时候用了不兼容的编码,就会出现奇怪符号。
- 二进制文件本身有冗余数据:你的
datoteka1.txt里可能除了对应FRI的字节,还混了其他无关内容?比如额外的空白字节、误写入的垃圾数据,转出来自然会带杂符号。
修正后的代码示例
给你写个标准的二进制转文本的正确写法,对比下你自己的代码哪里错了:
import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; public class DN06 { public static void main(String[] args) throws IOException { String location = "D:\\NetBeans\\Projects\\DN06\\src\\datoteka1.txt"; // 核心:用字节流读取二进制数据,别用字符流! try (FileInputStream fis = new FileInputStream(location)) { byte[] binaryBytes = fis.readAllBytes(); // 读取文件里的所有字节 // 用正确的编码转字符串,FRI是ASCII字符,用US_ASCII或UTF-8都可以 String result = new String(binaryBytes, StandardCharsets.US_ASCII); System.out.println("转换结果:" + result); } } }
额外排查步骤
- 检查二进制文件的真实内容:用十六进制编辑器打开
datoteka1.txt,看看是不是只有三个字节:0x46(对应F)、0x52(对应R)、0x49(对应I)。如果有其他字节,那就是文件本身的问题,得清理掉多余数据。 - 核对编码一致性:如果这个二进制文件是你自己生成的,检查生成代码里用的编码,转文本时必须用完全相同的编码(比如生成时用
StandardCharsets.US_ASCII,转的时候也得用这个)。
内容的提问来源于stack exchange,提问作者Sebastjan
相关产品推荐
相关产品推荐

