Кодировка UTF-8 в java, получение данных с сайта - PullRequest
0 голосов
/ 05 января 2010

Я пытаюсь получить данные с веб-сайта в кодировке UTF-8 и вставить их в базу данных (MYSQL). База данных также закодирована в UTF-8.

Это метод, который я использую для загрузки данных с определенного сайта.

public String download(String url) throws java.io.IOException {
        java.io.InputStream s = null;
        java.io.InputStreamReader r = null;
        StringBuilder content = new StringBuilder();
        try {
            s = (java.io.InputStream)new URL(url).getContent();

            r = new java.io.InputStreamReader(s, "UTF-8");

            char[] buffer = new char[4*1024];
            int n = 0;
            while (n >= 0) {
                n = r.read(buffer, 0, buffer.length);
                if (n > 0) {
                    content.append(buffer, 0, n);
                }
            }
        }
        finally {
            if (r != null) r.close();
            if (s != null) s.close(); 
        }
        return content.toString();
    }

Если для кодировки установлено значение 'UTF-8' (r = new java.io.InputStreamReader (s, "UTF-8");) данные, вставленные в базу данных, выглядят нормально, но когда я пытаюсь их отобразить, Я получаю что-то вроде этого: Кот-д'Ивуар, а не Кот-д'Ивуар.

Все мои сайты кодируются в UTF-8.

Пожалуйста, помогите.

Если для кодировки установлено значение 'windows-1252' (r = new java.io.InputStreamReader (s, "windows-1252");) все работает нормально, и я получаю Кот-д'Ивуар на своем веб-сайте (), но в Java этот заголовок выглядит как 'C? ´te d'Ivoire', что ломает другие вещи, такие как, например, ссылки. Что это значит ?

Ответы [ 4 ]

6 голосов
/ 05 января 2010

Я бы подумал об использовании commons-io, у них есть функция, которая делает то, что вы хотите сделать: ссылка

То есть замените ваш код следующим:

public String download(String url) throws java.io.IOException {
    java.io.InputStream s = null;
    String content = null;
    try {
        s = (java.io.InputStream)new URL(url).getContent();
        content = IOUtils.toString(s, "UTF-8")

    }
    finally {
        if (s != null) s.close(); 
    }
    return content.toString();
}

если это не сработает, начните изучать, можете ли вы сохранить его в файл правильно, чтобы исключить вероятность того, что ваша база данных установлена ​​неправильно.

2 голосов
/ 05 января 2010

Java

Проблема, похоже, заключается в HttpServletResponse, если у вас есть страница с сервлетом или jsp. Обязательно установите кодировку HttpServletResponse в UTF-8.

На странице jsp или в doGet или doPost сервлета, прежде чем какое-либо содержимое будет отправлено в ответ, просто выполните:

response.setCharacterEncoding("UTF-8");

PHP

В PHP попробуйте использовать функцию utf8-encode после извлечения из базы данных.

1 голос
/ 05 января 2010

Если кодировка установлена ​​в 'UTF-8' (r = новый java.io.InputStreamReader (s, "UTF-8");) данные, вставленные в базу данных, выглядят нормально, но когда я пытаюсь Покажите это, я получаю что-то вроде этого: Кот-д'Ивуар, а не Кот-д'Ивуар.

Таким образом, кодировка во время на дисплее неверна. Как вы это показываете? Согласно комментариям, это страница PHP? Если это так, то вам нужно принять во внимание две вещи:

  1. Запишите их в вывод HTTP-ответа, используя ту же кодировку, таким образом UTF-8.
  2. Установите тип содержимого на UTF-8, чтобы веб-браузер знал, какую кодировку использовать для отображения текста.

Что касается комментариев, вы, очевидно, уже сделали 2. Оставленный позади 1, в PHP вам нужно установить mb_string и также установить mbstring.http_output в UTF-8. Я нашел эту таблицу очень полезной.

1 голос
/ 05 января 2010

Установлена ​​ли для вашей базы данных кодировка UTF-8 для сервера, клиента и соединения, и были ли таблицы созданы с этой кодировкой?Проверьте «Показать переменные» и «Показать создание таблицы <one-of-the-tables> '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...