为了账号安全,请及时绑定邮箱和手机立即绑定

如何读取这个文件使字符不乱码?

如何读取这个文件使字符不乱码?

MMMHUHU 2022-11-02 16:53:47
我尝试使用 Java 读取文件。该文件没有文件类型。当我使用 UltraEdit 文本编辑器打开它时,它看起来像这样:文件中的第一行是00 00 10 01 00 51 21 E4 22 0D 6D F1 81 51 21 E2。我还检查了 UltraEdit 中的文件编码格式,它是 ANSI。但是如何在 00 00 10....中读取这个文件并在控制台上打印数据?我在 Java 1.7 中有 Eclipse。我试图在“GBK”、“GB2312”、“UTF-8”中读取该文件,但没有工作。当我试图在“ANSI”中读取它时,这是一个错误,错误信息线程“主”java.io.UnsupportedEncodingException 中的异常:ANSI。import java.io.FileInputStream;import java.io.InputStreamReader;import java.io.BufferedReader;public class Deconde{    public static void main (String []args) throws Exception{        //File byte stream        FileInputStream fis=new FileInputStream("D:\\0testData\\Data_21");        //A bridge of byte streams and character streams that can specify a specified character format        InputStreamReader isr=new InputStreamReader(fis,"ANSI");         String str=null;        int c=0;        while((c=isr.read())!=-1)            System.out.print((char)c);            System.out.println("_______________________________________________");        //Read characters directly, as long as the encoding problem is ok        BufferedReader br=new BufferedReader(isr);        str=br.readLine();        while(str!=null)        {            System.out.println(str);            str=br.readLine();        }        System.out.println("______________________________________________________");        //Use the default encoding of the InputStreamReader, no problem when it is ANSI        BufferedReader br2=new BufferedReader(new InputStreamReader(fis));        str=br2.readLine();        while(str!=null)        {            System.out.println(str);            str=br2.readLine();        }    }}```
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我确实在上面问了一个问题,但我假设您想要执行 HexDump,请考虑以下程序:


import java.io.DataInputStream;

import java.io.FileInputStream;

import java.io.InputStream;


public class HexDump {

    public static void main(String[] args) {

        try {

            InputStream isr = new DataInputStream(new FileInputStream("C:\\Temp\\some_file.dat"));

            int bytesPerLine = 16;

            int byteCount = 0;

            int data;

            while ((data = isr.read()) != -1) {

                if (byteCount == 0)

                    System.out.println();

                else if (byteCount % bytesPerLine == 0)

                    System.out.printf("\n", byteCount);

                else

                    System.out.print(" ");


                System.out.printf("%02x", data & 0xff);

                byteCount += 1;

            }

            System.out.println();

        } catch (Exception e) {

            System.out.println("Exception: " + e);

        }

    }    

}

它将获取样本文件并将各个字节转储为十六进制值(每行 16 个字节)。


正如斯蒂芬所提到的,对于二进制文件,实际上并没有任何类型的编码方案(您建议的类型 - 例如 ANSI 等)。这种类型的编码方案适用于文本文件,并告诉您它是 ANSI、UTF-8 还是 UNICODE 等,并告诉您如何阅读它。话虽如此,二进制文件确实隐含着“编码方案”。在二进制文件的情况下,正如斯蒂芬提到的,“编码方案”由文件的写入内容决定。这实际上也适用于文本文件,程序将确定它是否将文本文件写入为 ANSI、UTF-8 或任何编码方案。对于二进制文件,“编码方案”可能是 JPEG、PNG、GIF、MP3 或 MP4、ZIP 或 TAR 或数千种其他可能性中的任何一种。同样,这是由编写文件的程序决定的(例如


我希望这可以帮助您找到答案。


查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 82 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号