如何在R中使用正确的(中文)编码下载网页文本

时间:2010-12-06 17:00:16

标签: r

我想知道如何设置编码参数,以便在下载文本时,它看起来与我在网页浏览器中的页面源上看到的相同,例如:

readLines("http://www.baidu.com/s?wd=r+project")[132]
[1] "<div id=\"foot\">&copy;2010 Baidu <span>´ËÄÚÈÝϵ°Ù¶È¸ù¾ÝÄúµÄÖ¸Áî×Ô¶¯ËÑË÷µÄ½á¹û£¬²»´ú±í°Ù¶ÈÔ޳ɱ»ËÑË÷ÍøÕ¾µÄÄÚÈÝ»òÁ¢³¡</span></div>"

何时显示为:

> <div id="foot">&copy;2010 Baidu <span>此内容系百度根据您的指令自动搜索的结果,不代表百度赞成被搜索网站的内容或立场</span></div> 

非常感谢任何帮助!

# windows 7
sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252 
[2] LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
[1] XML_3.2-0.1    RCurl_1.4-4.1  bitops_1.0-4.1 rcom_2.2-3.1   rscproxy_1.3-1

loaded via a namespace (and not attached):
[1] tools_2.12.0

3 个答案:

答案 0 :(得分:3)

网页顶部说

<meta http-equiv="content-type" content="text/html;charset=gb2312"> 

维基百科说的是

  

GB2312是注册的互联网名称   对于一个关键的官方字符集   中华人民共和国,使用   简体中文字符

这似乎是合适的(但仍然可能是一个错误)。

要了解您平台上支持的编码:

iconvlist()

我的,这包括“GB2312”。让我们使用iconv转换它:

> a <- readLines("http://www.baidu.com/s?wd=r+project")[132]
> iconv(a, from="gb2312")
[1] "<div id=\"foot\">&copy;2010 Baidu <span>此内容系百度根据您的指令自动搜索的结果,不代表百度赞成被搜索网站的内容或立场</span></div>"

这是一个很好的衡量标准的截图:
alt text

从长远来看,您需要找到并使用您下载的每个网页中的编码参数,以使此编码正确无误。

答案 1 :(得分:3)

con = url("http://www.baidu.com/s?wd=r+project",  encoding = "gb2312")
readLines(con)[132] 
[1] "<div id=\"foot\">&copy;2010 Baidu <span>此内容系百度根据您的指令自动搜索的结果,不代表百度赞成被搜索网站的内容或立场</span></div>"

答案 2 :(得分:0)

'encoding'是HTML中使用的'charset'。

在您链接的页面中,指定了charset“charset = gb2312”。

指定encoding = gb2312可以正确恢复源。

但是,R可能不会以这种方式显示。您不是在R中显示HTML,只是获取网页的来源。您需要一个Web浏览器来显示HTML。