Я пытаюсь перенести и проанализировать базу данных на новую схему с использованием Java. Проблема в том, что есть некоторые символы, особенно арабские, которые перепутались при обработке данных на Java.Проблема синтаксического анализа арабских символов с использованием java
Вот одна из линий, где я получаю неприятности, с которыми находится в countryToParse.sql
файле:
(4, 'Afganistán', 1, 'Afgano', 'Afghanistan', 'AF', 'أفغانستان', 'Afghan', 'أفغاني');
После того как я разобрать его, в результате чего линия в countryParsed.sql рассматривается как:
(4, 'Afganistán', 1, 'Afgano', 'Afghanistan', 'AF', 'أ�?غانستان', 'Afghan', 'أ�?غاني');
Вы видите, как есть определенные арабские символы, которые перепутались.
Если я открою файлы, я могу проверить, что они оба закодированы в UTF-8.
Вот код Java, который я использую. В методе writeToTextFile()
я добавил три способа я нашел, чтобы написать файл, используя кодировку UTF-8 (не говоря уже о я получаю ту же ошибку, используя их три пути)
public class MainStackOverflow {
public static void main(String[] args) throws IOException {
String countryStr = new String(readTextFile("src/data/countryToParse.sql").getBytes(), "UTF-8");
writeToTextFile("src/data/countryParsed.sql", countryStr);
}
public static String readTextFile(String fileName) throws IOException {
String content = new String(Files.readAllBytes(Paths.get(fileName)));
return content;
}
public static void writeToTextFile(String fileName, String content) throws IOException {
/* Way 1 */
Files.write(Paths.get(fileName), content.getBytes("UTF-8"), StandardOpenOption.CREATE);
/* Way 2 */
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileName), "UTF-8"));
try {
out.write(content);
} finally {
out.close();
}
/* Way 3 */
PrintWriter out1 = new PrintWriter(new File(fileName), "UTF-8");
out1.write(content);
out1.flush();
out1.close();
/* */
}
}
Решено! Спасибо Николас – miguels
@miguels Хорошие новости! –