Как бороться с кодированным текстовым файлом UTF-16LE с помощью Java? или преобразовать его в ASCII? - PullRequest
2 голосов
/ 31 мая 2011

Прошу прощения, если об этом спрашивали раньше. Я пытаюсь обработать текстовый файл с помощью Java. Текстовый файл экспортируется из MS SQLServer. Когда я открываю его в PSPad (своего рода текстовом редакторе, в котором я могу просмотреть любой файл в шестнадцатеричном формате), он говорит мне, что мой текстовый файл находится в UTF-16LE. Так как я получаю это от кого-то другого, это вполне возможно.

Теперь моя Java-программа не может работать с этим форматом. Поэтому я хотел знать, есть ли какой-нибудь способ, которым я могу либо преобразовать свой текстовый файл в формат ASCII, либо выполнить некоторую предварительную обработку или что-нибудь еще? Я МОГУ изменить файл.

Любая помощь очень ценится.

Спасибо.

РЕДАКТИРОВАТЬ 1

Я написал эту программу, но она не работает, как ожидалось. Если я вижу выходной файл в PSPad, я могу видеть каждый символ как двухбайтовый символ, например «2» - 3200 вместо 32; «M» - это 4D00 вместо 4D и т. Д. Хотя и говорится, что кодировка выходного файла - UTF-8. Я немного запутался здесь. Может кто-нибудь сказать мне, что я делаю не так?

public static void main(String[] args) throws Exception {

        try {
            // Open the file that is the first
            // command line parameter
            FileInputStream fstream = new FileInputStream(
                    "input.txt");
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-16LE"));
            String strLine;
            // Read File Line By Line
            while ((strLine = br.readLine()) != null) {
                // Write to the file
                writeToFile(strLine);
            }
            // Close the input stream
            in.close();
        } catch (Exception e) {// Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }

        System.out.println("done.");
    }

    static public void writeToFile(String str) {
        try {
            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt", true), "UTF-8");
            BufferedWriter fbw = new BufferedWriter(writer);
            fbw.write(str);
            fbw.close();
        } catch (Exception e) {// Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }
    } 

РЕДАКТИРОВАТЬ 2

Вот снимки:

входной файл в PSPad (бесплатное средство просмотра в шестнадцатеричном формате) enter image description here

выходной файл в PSPad enter image description here

вот что я ожидал увидеть: enter image description here

Ответы [ 3 ]

6 голосов
/ 31 мая 2011

Создайте InputStreamReader для кодировки UTF-16LE, и все будет готово.

1 голос
/ 31 мая 2011

InputStreamReader позволит вам загрузить UTF-16EL в память. Затем вы можете выполнить все необходимые вам манипуляции со строками. Затем вы можете сохранить в формате ASCII, используя OutputStreamWriter . Используйте CharSet для выбора форматов.

0 голосов
/ 31 мая 2011

Только что нашел решение.

http://www.fileformat.info/convert/text/utf2utf.htm

Позволяет загружать и преобразовывать кодировки.

Это не постоянное решение, так как мой файл имеет размер 700 МБ +.Поэтому я опробую некоторые решения, опубликованные другими.

Это небольшое программное обеспечение помогает:

http://www.kalytta.com/tools.php

...