亲爱的名单,
我有一个问题(我认为)涉及到Windows和R之间的交互.
我正在试图用夏威夷群岛的数据来抄表.这是我的R代码:
library(XML) u <- "http://en.wikipedia.org/wiki/Hawaii" tables <- readHTMLTable(u) Islands <- tables[[5]]
输出是(第一列):
06001
Island 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.333 3 Kahoʻolawe[9] The Target Isle 20°33′N
156°36′W / 20.55°N
156.6°W / 20.55; -156.6 4 LÄnaÊ»i[10] The Pineapple Isle
20°50′N 156°56′W /
20.833°N 156.933°W / 20.833;
-156.933 5 Molokaʻi[11] The Friendly Isle 21°08′N
157°02′W / 21.133°N
157.033°W / 21.133; -157.033 6 Oʻahu[12] The Gathering Place
21°28′N 157°59′W /
21.467°N 157.983°W / 21.467;
-157.983 7 Kauaʻi[13] The Garden Isle 22°05′N
159°30′W / 22.083°N
159.5°W / 22.083; -159.5 8 Niʻ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
我也试图让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
另外,我已经尝试直接从Windows命令提示符,使用:chcp 65001和其中的变体,但没有改变任何东西.
我注意到从网络上搜索其他人也有问题,但还没有找到解决方案.我看起来这是一个Windows和R如何交互的问题.不幸的是,我掌握的这三台电脑都有这个问题.它发生在WinXP-x32和Win7-x86下.
有没有办法使R覆盖Windows设置,否则可以解决问题?
我也尝试过其他网站,每次在文本中都有é,ü,ä,î等等时,就会出现这个问题.
谢谢,
罗杰
如果您浏览维基百科页面,并将浏览器中的编码(IE,View – > Encoding;在Firefox中,View – > Character Encoding)更改为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")
不幸的是,它不起作用可能通过使用不同的转换来获取正确的文本(iconvlist()显示所有的可能性).
这可能只是剥夺了冒犯的人物,虽然这不是理想的.
iconv(Islands$Island,"ASCII","")