Чтение и запись файлов с акцентом
У меня есть входной файл в формате 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