2013-02-25 3 views
1

Мне нужна помощь. Я должен читать данные из файла и хранить его в Oracle db. Я сталкиваюсь с проблемами, когда в данные появляются символы типа «à» или «À». Например, «à» читается и становится «Ã» в моем приложении, поэтому, когда я пытаюсь сохранить данные в db, иногда db жалуется на значения, слишком большие относительно поля, которое будет сохранено. Я также tryiedПерсонаж inferno

Normalizer.normalize(row, Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", "");

я заплатил внимание о кодировании тоже. Я замечаю, что если я запустил приложение на файл данных, файл Cp1252, на машине Windows я не получил никаких ошибок. К сожалению, у меня появились ошибки, когда я запускал материал на машине Linux. Я использую java 6. TIA.

+0

При чтении файла вам необходимо преобразовать из байтов в строку с соответствующим набором символов. Кажется, вы используете кодировку по умолчанию. – assylias

+0

Здравствуйте, @assylias, я прочитал файл этой инструкцией: 'br = new BufferedReader (новый InputStreamReader (новый FileInputStream (новый файл (« myfile.txt »)), Charset.forName (« Cp1252 »));' I измените значение Charset на UTF-8, когда файл находится на машине linux. – Francesco

+0

Не меняйте эту строку на машине Linux! Файл кодируется кодировкой cp1252, поэтому даже в linux вам нужно прочитать его с этой кодировкой (если только я не пропустил что-то). – assylias

ответ

1

Таким образом, кодировка символов по умолчанию на вашем компьютере Windows, вероятно, является окном-1252 (надмножество латинского-1). Это означает, что если вы не укажете кодировку при чтении в файле, Java по умолчанию будет использовать вашу систему по умолчанию и получить ее правильно.

На вашей машине Linux ваша кодировка по умолчанию, вероятно, UTF-8. Это означает, что если вы явно не укажете кодировку во время чтения файла, по умолчанию будет использоваться UTF-8. , , что в данном случае неверно.

Вы не отправляли, как вы читаете в файле, но, к примеру:

InputStreamReader isr = new InputStreamReader(file, "UTF-8"); 

Это создаст считывающее входной поток для чтения файла, отформатированный в UTF-8.

+0

Здравствуйте. Спасибо за ответ. Я читаю данные из файла Windows на машине linux. Вот как я его читал: 'br = new BufferedReader (новый InputStreamReader (новый FileInputStream (новый файл (« myfile.txt »)), Charset.forName (« UTF-8 »));' – Francesco

+0

Ну, ваша проблема правильная там. Вы читаете файл Windows-1252 как UTF-8. Вместо этого используйте «Cp1252». – Aurand

Смежные вопросы