4

我正在从 RSS 频道获取数据,对其进行清理并保存在数据库中。我使用 java、tidy、MySQL 和 JDBC。

脚步:

  1. 我抓取 RSS 记录。没关系。
  2. 我用整洁的方式清理 html。这是一个转变。Tidy 会自动将“所以它不太可能”这样的字符串转换为“所以它不太可能”。
  3. 我将此字符串保存到表中

MySQL 方案是

CREATE TABLE IF NOT EXISTS `rss_item_safe_texts` (
  `id` int(10) unsigned NOT NULL,
  `title` varchar(1000) NOT NULL,
  `link` varchar(255) NOT NULL,
  `description` mediumtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

JDBC 连接 URL 是

connUrl = "jdbc:mysql://" + host + "/" + database + "?user=" + username + "&password=" + password + "&useUnicode=true&characterEncoding=UTF-8";

Java 代码是

PreparedStatement updateSafeTextSt = conn.prepareStatement("UPDATE `rss_item_safe_texts` SET `title` = ?, `link` = ?, `description` = ? WHERE `id` = ?");
updateSafeTextSt.setString(1, EscapingUtils.escapeXssInjection(title));
updateSafeTextSt.setString(2, link);
updateSafeTextSt.setString(3, EscapingUtils.escapeXssInjection(description));
updateSafeTextSt.setInt(4, itemId);
updateSafeTextSt.execute();
updateSafeTextSt.close();

结果,我在数据库中看到了损坏的字符,例如“所以它不太可能”。我看到的相同然后在网页(utf-8 页面)上输出文本。

4

1 回答 1

5

不要忘记还有很多其他地方可以设置不同的编码。例如,检查您的数据库/表/列是否开始具有正确的编码。此外,我通常在 MySQL 中将所有内容设置为 utf8:

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
于 2010-05-14T11:06:11.677 回答