Как я могу преобразовать литералы UTF-8 в его символ UTF-8? - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть набор текстовых файлов, которые были закодированы в UTF-8.Текст внутри файлов выглядит следующим образом: \x6c\x69b/\x62\x2f\x6d\x69nd/m\x61x\x2e\x70h\x70.

Я скопировал все эти текстовые файлы и поместил их в каталог /convert/.

Мне нужно прочитать каждый файл ипреобразовать закодированные литералы в символы, затем сохранить файл.filename.converted.txt

Каким был бы самый разумный подход для этого?Что я могу сделать, чтобы преобразовать в новый текст?Есть ли функция для обработки текста Unicode для преобразования между литералом в символьные типы?Должен ли я использовать для этого другой язык программирования?

Это то, что у меня есть в данный момент:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class decode {
    public static void main(String args[]) {
        File directory = new File("C:/convert/");
        String[] files = directory.list();
        boolean success = false;
        for (String file : files) {
            System.out.println("Processing \"" + file + "\"");

            //TODO read each file and convert them into characters
            success = true;

            if (success) {
                System.out.println("Successfully converted \"" + file + "\"");
            } else {
                System.out.println("Failed to convert \"" + file + "\"");
            }

            //save file
            if (success) {
                try {
                    FileWriter open = new FileWriter("C:/convert/" + file + ".converted.txt");
                    BufferedWriter write = new BufferedWriter(open);
                    write.write("TODO: write converted text into file");
                    write.close();
                    System.out.println("Successfully saved \"" + file + "\" conversion.");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

(Похоже, что вы имеете в виду некоторую путаницу - этот ответ предполагает, что входной файл полностью находится в ASCII, и использует "\ x" для шестнадцатеричного кодирования любых байтов, которые не находятся в диапазоне ASCII.) *

Звучит так, будто часть UTF-8 на самом деле не имеет значения. Вы можете рассматривать его как непрозрачные двоичные данные для вывода. Предполагая, что входной файл полностью ASCII:

  • Открыть входной файл как текст (например, используя FileInputStream, завернутый в InputStreamReader с указанием кодировки "US-ASCII")
  • Открыть выходной файл как двоичный файл (например, используя FileOutputStream)
  • Чтение каждого символа из ввода
  • Это '\'?
    • Если нет, запишите значение ASCII символа в выходной поток (на всякий случай от char до byte)
    • Какой следующий персонаж?
    • Если это 'x', прочитайте следующие два символа, преобразуйте их из шестнадцатеричного в байтовый (для выполнения этой части достаточно кода) и запишите этот байт в выходной поток
    • Если это '\', записать значение ASCII для '\' в выходной поток
    • В противном случае, возможно, выдать исключение, указывающее сбой
  • Цикл, пока вы не исчерпали входной файл
  • Закройте оба файла в блоках finally

После этого у вас будет «обычный» файл UTF-8, который должен быть доступен для чтения любому текстовому редактору, поддерживающему UTF-8.

0 голосов
/ 04 ноября 2011

java.io.InputStreamReader может использоваться для преобразования входного потока из произвольной кодировки в Java char s. Я не совсем уверен, как вы хотите выписать это обратно, хотя. Вы хотите, чтобы символы, не входящие в ASCII, были записаны как escape-последовательности ASCII Unicode?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...