我必须将二进制数据转换为文本,我认为我很接近,但有些东西不能正常工作。在这种情况下,输出应该是字母“FRI”,但我得到一些围绕字母的其他符号: F2eÊ)R¤I$ I $ I。 我不知道这似乎是什么问题。这是代码:
public class DN06 {
public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
String location = "D:\\NetBeans\\Projects\\DN06\\src\\datoteka1.txt";
File newFile = new File(location);
Scanner sc = new Scanner(newFile);
StringBuilder sb = new StringBuilder();
String drek = "";
try{
while (sc.hasNext()){
String content = new String(sc.next().getBytes(),"UTF-8");
for (int i=0;i<=content.length()-8;i++){
int charCode = Integer.parseInt(content.substring(i,i+8),2);
drek += new Character((char)charCode).toString();
}
System.out.println(drek);
}
}catch( UnsupportedEncodingException e){
System.out.println("Unsupported character set");
}
}
}
答案 0 :(得分:3)
在第
行String content = new String(sc.next().getBytes(),"UTF-8");
您已经拥有所需的输出。在这里,您已经使用编码为UTF-8的字符串解析了字符串数组。之后你试图再次将它解码为UTF-8,因此你得到了错误的结果。
编辑:
由于您的文件内容是用二进制文件编写的,这是不够的,您必须解析每个字节一次。你的for循环中的问题是,你在二进制字符串中向右移动i总是只有一位而不是8位数。
for (int i=0;i<=content.length()-8;i = i+8)
这应该可以完成这项工作,这次是