【问题标题】:lexical error: invalid bytes in UTF8 string词法错误:UTF8 字符串中的无效字节
【发布时间】:2019-02-11 09:14:27
【问题描述】:

我正在尝试使用下面显示的代码从 json 文件中提取数据。 但是,返回以下错误:

Error: lexical error: invalid bytes in UTF8 string.
          fr":"Ces données sont publiées avec un délai de cinq jours
                     (right here) ------^

在我的浏览器中检查 json 文件显示数据显示如下:

"fr":"Ces donn\u00e9es sont publi�es avec un d\u00e9lai de cinq jours."

有没有办法在写入数据的同时忽略任何导致错误的 UTF8 字符串?

library(jsonlite)

URL <- paste0("https://www.energy-charts.de/power_unit/month_lignite_unit_2017_12.json")

data <- fromJSON(getURL(URL))

【问题讨论】:

  • 您看到的错误是由将非 UTF-8 字符串声明为 UTF-8 引起的。解决方案是从一开始就正确声明它们;那么错误就会消失。

标签: r jsonlite


【解决方案1】:

问题是 URL 以 latin1 编码返回数据,而您的系统默认将其读取为 UTF-8。您可以正确使用

library(jsonlite)
library(RCurl)  

URL <- "https://www.energy-charts.de/power_unit/month_lignite_unit_2017_12.json"

data <- fromJSON(getURL(URL, encoding = "latin1"))

我还更正了您代码中的一些小错误:您忘记请求RCurl,并且不需要paste0

【讨论】:

  • jsonlite 可以自动从 URL 中提取数据,使用 curl 包(由同一作者)
  • 当然可以,但是在这种情况下它不起作用,因为服务器没有声明文件的编码。如果您使用的是默认为 UTF-8 的系统,则会收到 OP 遇到的错误。
猜你喜欢
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2021-05-01
  • 2022-01-26
相关资源
最近更新 更多