Коррупция персонажа, идущая из буферреджера на буферритр в Java

StackOverflow https://stackoverflow.com/questions/3559411

Вопрос

В Java я пытаюсь анализировать файл HTML, который содержит сложный текст, такой как греческие символы.

Я столкнулся с известной проблемой, когда текст содержит левую облицовочную цитату. Текст такой как

mutations to particular “hotspot” regions

становится

 mutations to particular “hotspot�? regions

У меня была изолирована проблема, написав простую копию текста Meathood:

public static int CopyFile()
{
    try
    {
    StringBuffer sb = null;
    String NullSpace = System.getProperty("line.separator");
    Writer output = new BufferedWriter(new FileWriter(outputFile));
    String line;
    BufferedReader input =  new BufferedReader(new FileReader(myFile));
while((line = input.readLine())!=null)
    {
        sb = new StringBuffer();
        //Parsing would happen
        sb.append(line);
        output.write(sb.toString()+NullSpace);
    }
        return 0;
    }
    catch (Exception e)
    {
        return 1;
    }
}

Кто-нибудь может предложить несколько советов, как исправить эту проблему?

★ Мое решение

InputStream in = new FileInputStream(myFile);
        Reader reader = new InputStreamReader(in,"utf-8");
        Reader buffer = new BufferedReader(reader);
        Writer output = new BufferedWriter(new FileWriter(outputFile));
        int r;
        while ((r = reader.read()) != -1)
        {
            if (r<126)
            {
                output.write(r);
            }
            else
            {
                output.write("&#"+Integer.toString(r)+";");
            }
        }
        output.flush();
Это было полезно?

Решение

Файл чтения не находится в том же кодировке (возможно UTF-8) в качестве файла, написанного (вероятно, ISO-8859-1).

Попробуйте следующее, чтобы генерировать файл с кодировкой UTF-8:

BufferedWriter output = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile),"UTF8"));

К сожалению, определение кодирования файла очень сложно. Видеть Java: Как определить правильное кодирование кабриогития потока

Другие советы

В дополнение к тому, что писал Тьерри-Димитрий Рой, если вы знаете кодировку, вы должны создать FialeReader с небольшим количеством дополнительной работы. Из документов:

Удобство класса для чтения файлов символов. Конструкторы этого класса предполагают, что кодирование символов по умолчанию и размер буфера по умолчанию. Чтобы указать эти значения самостоятельно, постройте INPUTSSTREAMREADER на FileInPutStream.

То Javadoc for. FileReader говорит:

Конструкторы этого класса предполагают, что кодирование символов по умолчанию и размер буфера по умолчанию. Чтобы указать эти значения самостоятельно, постройте INPUTSSTREAMREADER на FileInPutStream.

В вашем случае, что кодировка символов по умолчанию, вероятно, нет соответствующий. Найдите, что кодирует файл ввода, и укажите его. Например:

FileInputStream fis = new FileInputStream(myFile);
InputStreamReader isr = new InputStreamReader(fis, "charset name goes here");
BufferedReader input = new BufferedReader(isr);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top