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)
输出是(第一组列):
Run Code Online (Sandbox Code Playgroud)Island Nickname > > Islands Island Nickname > > Location 1 Hawaiʻi[7] The Big
岛屿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覆盖窗口设置或者问题可以解决吗?我也尝试过其他网站,每当有待删除的文本中有é,ü,ä,î等等时,就会出现问题.
谢谢你,罗杰
一个不完全的答案:
如果您查看维基百科页面并将浏览器中的编码(在 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)