2016-04-05 3 views
0

Я пытаюсь перенести и проанализировать базу данных на новую схему с использованием 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(); 
    /* */ 
    } 
} 

ответ

0

Вы забыли установить кодировку в этом линия:

String content = new String(Files.readAllBytes(Paths.get(fileName))); 

Попробуйте просто:

public static void main(String[] args) throws IOException { 

    String countryStr = new String(readTextFile("src/data/countryToParse.sql"), "UTF-8"); 
    writeToTextFile("src/data/countryParsed.sql", countryStr); 
} 

public static byte[] readTextFile(String fileName) throws IOException { 
    return Files.readAllBytes(Paths.get(fileName)); 
} 
+0

Решено! Спасибо Николас – miguels

+0

@miguels Хорошие новости! –