gpt4 book ai didi

java store 统一编码爬取页面到mysql

转载 作者:行者123 更新时间:2023-11-30 23:37:40 25 4
gpt4 key购买 nike

我正在使用 Java 将网页抓取到 MySQL 数据库。

这些网页采用各种编码(例如 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。 MySQL 连接 url 为 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

最佳答案

Java 将在内部正确表示由 Eclipse 控制台显示的字符串。您应该能够使用 UTF8 连接到数据库并将数据存储在 UTF8 编码的列中。如果你希望列是 GBK,我仍然会使用 UTF8 连接。如果这不起作用,如果您可以发布您的 CREATE TABLE 语句和您之前收到的错误消息,将会很有帮助。

关于java store 统一编码爬取页面到mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com