【问题标题】:R htmlTreeParse() encoding UTF-8R htmlTreeParse() 编码 UTF-8
【发布时间】:2014-08-13 22:42:12
【问题描述】:

我正在尝试通过以下代码获取链接列表

url.i<-"http://www.mijnwoordenboek.nl/duits/synoniemen/A/1.html"
doc<-htmlTreeParse(url.i,useInternal=TRUE,encoding="UTF-8")
xpathSApply(doc,"//a",xmlGetAttr,'href')[82]

输出: [1] "http://www.mijnwoordenboek.nl/duits/synoniemen/abbeißen"

但输出中的问题是“abbeißen”,但它应该是“abbeißen”,我已经指定了编码。

以下版本出现同样的问题

Windows、R 64 位 3.1.0 和 XML_3.98-1.1

Windows、R 64 bit-3.1.1 和 XML_3.98-1.1

Windows、R 32 位 3.1.0 和 XML_3.98-1.1

【问题讨论】:

  • 我没有得到相同的结果。它按预期为我输出"http://www.mijnwoordenboek.nl/duits/synoniemen/abbeißen"。如果你对这个结果执行Encoding(),你会得到什么?您使用的是什么操作系统、R 版本和XML 版本?此处为 Mac、R 3.1.0 和 XML_3.98-1.1
  • Encoding() 返回“未知”。
  • 我可以在 Windows 上重现它 - Encoding()unknown,尽管它s in fact utf-8`(=> 如果你手动设置它就可以工作)。奇怪..
  • 谢谢,我也可以继续使用这个临时解决方案。
  • 有趣的是,这似乎只发生在xmlGetAttr。例如xpathSApply(doc,"//a",xmlValue)[82] 似乎保持正确的编码。

标签: xml r utf-8


【解决方案1】:

不幸的是,xmlGetAttr 似乎不像xmlValue 那样支持编码。但您可以指定一个转换器与xmlGetAttr 一起使用。这是一个将字符值标记为 UTF-8 的函数

markUTF8 <- function(x) `Encoding<-`(x, "UTF-8")

然后你可以使用它

xpathSApply(doc,"//a",xmlGetAttr,'href', converter=markUTF8)[82]
# [1] "http://www.mijnwoordenboek.nl/duits/synoniemen/abbeißen"

【讨论】:

  • 目前我使用的是相同的,但由于问题不会在 mac 上复制,我认为这是一种错误而不是支持问题。
猜你喜欢
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2012-11-07
  • 2015-03-04
  • 2016-07-05
  • 1970-01-01
相关资源
最近更新 更多