我从RSS频道抓取数据,清理它并保存在数据库中.我使用java,tidy,MySQL和JDBC.
脚步:
>我抓住了RSS记录.没关系.
>我用整洁来消毒html.
这是一个转变. Tidy会自动将“So it’ s)”这样的字符串转换为“所以不太可能”.
>我将此字符串保存到表中
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页面).
解决方法:
不要忘记还有很多其他地方可以设置不同的编码.例如,检查数据库/表/列是否具有正确的编码开头.另外,我通常会在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/ |
+--------------------------+----------------------------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。