R中rvest包read_html()指定多种编码仍无法读取日文网页如何解决?
R语言rvest读取EUC-JP编码日文网页报错解决方案
问题原因
直接调用read_html()传入URL时,xml2底层解析器遇到网页中不符合EUC-JP编码规范的异常字节会直接中断解析,抛出转换错误。
解决方案
步骤1:先抓取网页原始响应
不要直接将URL传入read_html(),先用httr包获取网页完整二进制响应,避免自动解析时的编码冲突:
library(rvest) library(httr) # 发送请求获取原始响应 resp <- GET("https://www.post.japanpost.jp/kitte_hagaki/stamp/kogata/index.php?p=4")
步骤2:手动转码后读取
两种转码方案可选,均可避开异常字节的报错问题:
- 方案1:用
iconv转码,主动过滤异常字节
# 手动转码,不符合编码规范的字节自动替换为空 html_text <- iconv(rawToChar(resp$content), from = "EUC-JP", to = "UTF-8", sub = "") # 解析网页 doc <- read_html(html_text, encoding = "UTF-8")
- 方案2:用httr内置的content函数处理编码
# 直接指定编码提取文本内容 html_text <- content(resp, as = "text", encoding = "EUC-JP") # 解析网页 doc <- read_html(html_text)
步骤3:验证解析结果
提取页面元素验证日文是否正常显示:
# 提取页面标题测试 html_text(html_element(doc, "title"))
正常运行会返回日文格式的页面标题,说明解析成功。
内容的提问来源于stack exchange,提问作者Corolla34
相关产品推荐
相关产品推荐

