奇怪的字符:R和Windows语言环境的交互?

use*_*746 12 windows locale localization r

WinXP-x32,R-2.13.0

亲爱的清单,

我有一个问题(我认为)与Windows和R之间的交互有关.

我正在试图用夏威夷群岛上的数据写一张桌子.这是我的R代码:

library(XML)
u <- "http://en.wikipedia.org/wiki/Hawaii"
tables <- readHTMLTable(u)
Islands <- tables[[5]]
Run Code Online (Sandbox Code Playgroud)

输出是(第一组列):

      Island            Nickname                                                                  > > Islands
      Island            Nickname                                                                  > > Location 1    Hawaiʻi[7]      The Big
Run Code Online (Sandbox Code Playgroud)

岛屿19°34°N 155°30°W/19.567°N 155.5°W/ 19.567; -155.5 2 Maui [8] The Valley Isle 20°48°N 156°20°W/20.8°N 156.333°W/ 20.8; -156.3333KahoÊ»olawe [9]目标岛20°33°N 156°36°ï»¿/20.55°N 156.6°W/ 20.55; -156.64LÄnaÊ»i [10]菠萝岛20°50°N 156°56°W/20.833°N 156.933°W/ 20.833; -156.9335MolokaÊ»i [11]友情岛21°08°N 157°02°W/21.133°N 157.033°W/ 21.133; -157.033 6Ê»ahu [12]聚集地21°28°N 157°59°W/21.467°N 157.983°W/ 21.467; -157.983 7KauaÊ»i [13] The Garden Isle 22°05'N 159°30°W/22.083°N 159.5°W/ 22.083; -159.5 8NiÊ»ihau [14] The Forbidden Isle
21°54°N 160°10°W/21.9°N 160.167°W/ 21.9; -160.167

如你所见,那里有"怪异"的角色.我也试过readHTMLTable(u, encoding = "UTF-16"),readHTMLTable(u, encoding = "UTF-8") 但没有帮助.

在我看来,字符集和R的Windows设置的交互可能存在问题.

sessionInfo()

> sessionInfo()
R version 2.13.0 (2011-04-13)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=Dutch_Netherlands.1252  LC_CTYPE=Dutch_Netherlands.1252    LC_MONETARY=Dutch_Netherlands.1252
[4] LC_NUMERIC=C                       LC_TIME=Dutch_Netherlands.1252  

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

other attached packages:
[1] XML_3.2-0.2
Run Code Online (Sandbox Code Playgroud)

我还试图通过输入:让R使用另一个设置Sys.setlocale("LC_ALL", "en_US.UTF-8"),但这会产生响应:

> Sys.setlocale("LC_ALL", "en_US.UTF-8")
[1] ""
Warning message:
In Sys.setlocale("LC_ALL", "en_US.UTF-8") :
  OS reports request to set locale to "en_US.UTF-8" cannot be honored
Run Code Online (Sandbox Code Playgroud)

另外,我试图直接从windows命令提示符进行更改,使用:chcp 65001和变体,但这并没有改变任何东西.

我在网上搜索时注意到其他人也有这个问题,但一直无法找到解决方案.我认为这是Windows和R如何交互的问题.不幸的是,我所有的三台计算机都有这个问题.它出现在WinXP-x32和Win7-x86下.

有没有办法让R覆盖窗口设置或者问题可以解决吗?我也尝试过其他网站,每当有待删除的文本中有é,ü,ä,î等等时,就会出现问题.

谢谢你,罗杰

Ric*_*ton 1

一个不完全的答案:

如果您查看维基百科页面并将浏览器中的编码(在 IE 中,查看 -> 编码;在 Firefox 中,查看 -> 字符编码)更改为 Western (ISO-8869-1) 或 Western (Windows-1252),那么您看到那些愚蠢的角色​​。这应该意味着您可以使用它iconv来更改编码并解决您的问题。

#Convert factors to character
Islands <- as.data.frame(lapply(Islands, as.character), stringsAsFactors = FALSE)

iconv(Islands$Island, "windows-1252", "UTF-8")
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不起作用。通过使用不同的转换可能会获得正确的文本(iconvlist()显示所有可能性)。

它可能只是简单地删除有问题的字符,尽管这并不理想。

iconv(Islands$Island, "windows-1252", "ASCII", "")
Run Code Online (Sandbox Code Playgroud)