Чтение и запись файлов с акцентом

У меня есть входной файл в формате XML, и он хорошо сформирован, с хорошо написанными акцентами. Файл создается с помощью скрипта PHP, который работает нормально. Но когда я читаю XML-файл и записываю его в другой XML-файл с помощью Java-программы, вместо символов с акцентами ставятся странные символы.

Это метод, который читает файл XML:

public static String getArchivo(FileInputStream fileinputstream)
{
    String s = null;
    try
    {
        byte abyte0[] = new byte[1024];
        int i = fileinputstream.read(abyte0);
        if(i != -1)
        {
            s = new String(abyte0, 0, i);
            for(int j = fileinputstream.read(abyte0); j != -1; j = fileinputstream.read(abyte0))
            {
                s = s + new String(abyte0, 0, j);
            }

        }
    }
    catch(IOException ioexception)
    {
        s = null;
    }
    return s;
}

Из-за того, что файл читается байт за байтом, как заменить "плохие" байты на правильные байты для акцентированных символов? Если чтение файлов, таких как эти байты за байтом, не очень хорошая идея, как я могу сделать это лучше?

Знаки, которые мне нужны, это: á, é, í, ó, ú, Á, É, Ó, Ó, Ú, ñ, Ñ и °.

заранее спасибо

2 ответа

У меня работает с использованием Chaserset ISO 8859-1. Синтаксис в котлине:

val inputStream : InputStream = FileInputStream(filePath)
val json = inputStream.bufferedReader(Charsets.ISO_8859_1).use { it.readText()}

Возможно, вы читаете файл с кодировкой UTF-8. Специальные символы не являются частью кодировки UTF-8. Изменить с UTF-8 на UTF-16

Что-то вроде

InputStream in = ...
InputSource is = new InputSource(new InputStreamReader(in, "utf-16")); 

Как правильно сказал Джорди, вне utf-8 нет специальных символов. Поэтому рассмотрим первую часть как информацию для других специальных символов.

Посмотрев глубже на ваш код, я вижу, что вы читаете int и конвертируете его в String. Не конвертируй это. Читайте байты и пишите байты, чтобы быть уверенными, что данные не будут изменены.

При чтении файла лучше использовать кодировку utf-8.

BufferedReader rd = new BufferedReader(new InputStreamReader(is, "utf-8"));

В письменной форме также использовать UTF-8

OutputStreamWriter writer = new OutputStreamWriter( new FileOutputStream(filePath, true), "utf-8");

Это сработало для меня.

При чтении файла в редакторе vi или другом редакторе измените кодировку по умолчанию на utf-8

карта локали LANG=en_US.UTF-8

Другие вопросы по тегам