【问题标题】:R JSON UTF-8 parsingR JSON UTF-8 解析
【发布时间】:2015-07-22 05:57:53
【问题描述】:

尝试在 R 中解析俄语字母表中的 JSON 文件时遇到问题。文件如下所示:

[{"text": "Валера!", "type": "status"}, {"text": "когда выйдет", "type": "status"}, {"text": "КАК ДЕЛА?!)", "type": "status"}]

并以 UTF-8 编码保存。我尝试了库 rjson、RJSONIO 和 jsonlite 来解析它,但它不起作用:

library(jsonlite)
allFiles <- fromJSON(txt="ru_json_example_short.txt")

给我错误

Error in feed_push_parser(buf) : 
  lexical error: invalid char in json text.
                                       [{"text": "Валера!", "
                     (right here) ------^

当我将文件保存为 ANSI 编码时,它可以正常工作,但随后,俄语字母转换为问号,因此输出无法使用。 请问有人知道如何在R中解析这样的JSON文件吗?

编辑: 上面提到的适用于保存在 Windows 记事本中的 UTF-8 文件。当我将它保存在 PSPad 中并对其进行解析时,结果如下所示:

    text   type
1                                         <U+0412><U+0430><U+043B><U+0435><U+0440><U+0430>! status
2 <U+043A><U+043E><U+0433><U+0434><U+0430> <U+0432><U+044B><U+0439><U+0434><U+0435><U+0442> status
3                              <U+041A><U+0410><U+041A> <U+0414><U+0415><U+041B><U+0410>?!) status

【问题讨论】:

  • 你在windows上吗?您是否 100% 确定文件保存为 UTF-8?
  • 是的,我在 Windows 上。我在记事本中将文件保存为 UTF-8。
  • 在 R 中,我尝试了 x&lt;-'[{"text": "Валера!", "type": "status"}, {"text": "когда выйдет", "type": "status"}, {"text": "КАК ДЕЛА?!)", "type": "status"}]' 并验证了 Encoding(x)=="UTF-8"。然后我用writeLines(x, "test.txt", useBytes=TRUE) 写出来,然后用fromJSON(txt="test.txt") 毫无问题地读出来。
  • 是的,谢谢,这对我有用,但结果是在编辑后的问题中——而不是俄文字母,只有它们的代码,这也很漂亮,因为我想使用文本,看看那里写了什么......
  • 如果你运行x&lt;-fromJSON(...),那么x$test 是什么样子的,Encoding(x$text) 返回什么?

标签: json r unicode utf-8


【解决方案1】:

尝试以下方法:

dat <- fromJSON(sprintf("[%s]",
                paste(readLines("./ru_json_example_short.txt"),
                collapse=",")))
dat
[[1]]
       text   type
1      Валера! status
2 когда выйдет status
3  КАК ДЕЛА?!) status

参考:Error parsing JSON file with the jsonlite package

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2016-05-11
    • 2018-11-17
    • 2016-04-01
    • 1970-01-01
    • 2012-11-07
    • 2015-12-10
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多