Магазин Java сканирует страницу в MySQL в единой кодировке - PullRequest
1 голос
/ 01 июня 2011

Я сканирую веб-страницы в базе данных MySQL, используя Java.

Эти веб-страницы имеют различную кодировку (например, GBK, UTF8 ...) и могут не содержать символов ASCII, однако мне удалось определить кодировку каждой страницы.и получить читаемую строку (читаемая строка означает, что она отображает то же самое в Eclipse console, что и в Web Browser).

Я получаю кодировку веб-страницы, по умолчанию UTF-8, если не найден, из тега <meta>.Смотрите следующий фрагмент:

InputStream is = hconn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b = -1;
while (-1 != (b = is.read())) {
    baos.write((byte) b);
}

String charset = "UTF-8";
Document doc = Jsoup.parse(baos.toString());
Elements metas = doc.select("meta[http-equiv=Content-Type]");

Pattern p = Pattern.compile("charset=([0-9a-zA-Z_\\-]+)");
Matcher m;

for (Element meta : metas) {
    m = p.matcher(meta.toString());
    if (m.find())
        charset = m.group(1);
}

String str = new String(baos.toByteArray(), charset);

Затем я сохраняю его в MySQL.URL-адрес соединения MySQL - jdbc:mysql://localhost:3306/db?characterEncoding=gbk, а столбец для хранения текста имеет кодировку GBK.

Случилось так, что строки, хорошо отображаемые в Eclipse console, оказались не распознаваемой последовательностью в MySQL и иногда могут вызывать SQLException.Наблюдение: ни одна строка GBK не будет работать неправильно.

Я думаю, преобразование строк Non-GBK в GBK будет работать, но как?И есть ли обходные подходы?Моя конечная цель - построить инвертированный индекс.

Ответы на преобразование кодировки предпочтительнее.

Любая помощь будет благодарна.Заранее спасибо.


Добавить:

Создать таблицу SQL:

CREATE TABLE `indexer`.`pages` (
  `content` TEXT CHARACTER SET gbk COLLATE gbk_chinese_ci,
  `url` VARCHAR(512) NOT NULL,
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
)
ENGINE = InnoDB;

Сообщение об ошибке:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'é”??μ¢Wé”??μ?é”??μ—é”??–¤??·DPIyé”????é”??–¤??·é”????0")Sé”????<é”????cé”??–¤??' at line 1

1 Ответ

0 голосов
/ 01 июня 2011

Java будет внутренне корректно представлять строку, отображаемую консолью Eclipse. Вы должны иметь возможность подключиться к базе данных с помощью UTF8 и хранить данные в столбце в кодировке UTF8. Если вы хотите, чтобы столбец был GBK, я все равно подключился бы с использованием UTF8. Если это не сработает, было бы полезно, если бы вы могли опубликовать свое заявление CREATE TABLE и сообщения об ошибках, которые вы получали ранее.

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