Как прочитать этот файл, чтобы символы не искажались? - PullRequest
0 голосов
/ 01 мая 2019

Я пытался прочитать файл с помощью 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.Iпопытался прочитать этот файл в «GBK», «GB2312», «UTF-8», но не сработал. Когда я попытался прочитать его в «ANSI», то это ошибка,

Сообщение об ошибке

Исключение в потоке "main" 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 Ответ

0 голосов
/ 02 мая 2019

Я задал вопрос выше, но я предполагаю, что вы хотите выполнить 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, или любая из тысяч других возможностей.Опять же, это определяется программой, которая написала файл (например, редактор изображений, редактор аудиофайлов и т. Д.).

Надеюсь, это поможет вам найти ваш ответ.

...