2011-05-04 75 views
12

的WinXP-X32,R-2.13.0奇怪的字符:R和Windows语言环境的交互?

亲爱的名单,

我有一个问题,(我认为)涉及到

我想刮Windows和R.

之间的相互作用与夏威夷群岛上的数据表。这是我的R代码里面:

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

输出(第一组列):

 Island   Nickname                 > > Islands 
     Island   Nickname                 > > Location 1 Hawaiʻi[7]  The Big 

岛19A°34A€²N155A°30A€²W/  19.567°N 155.5°/ 19.567; -155.5 2毛伊岛[8]谷岛20°48°N 156°20°/°C/ °20.8°N 156.333°/°20.8; -156.333 3 Kaho»olawe [9]目标岛20°33'N 156°36°/°C 20.55°N 156.6°/ 20.55°; -156.6 4拉涅我[10]菠萝岛 20°50°N 156°56°/°0°°20.833°N 156.933°/°20.833; -156.933 5MolokaÊ»i [11]友好岛21°08' 157°02'/ 21.133°N 157.033°/ 21.133; -157.033 6或ahu [12]聚会场所 21°28°N 157°59°/°21.467°N 157.983°W/21.467; -157.983 7考艾我[13]花园小岛22°05'N 159°30'/ 22.083°N 159.5°/ 22.083; -159.5 8倪仕豪[14]故宫
21°54'N 160°10°/ 21.9°N 160.167°W/21.9; -160.167

正如你所看到的,那里有“怪异”的字符。我也试过readHTMLTable(u, encoding = "UTF-16")readHTMLTable(u, encoding = "UTF-8") 但这并没有帮助。

在我看来,有可能是用的字符集的Windows设置和R.相互作用的问题

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 

此外,我试图做出改变directl y从Windows命令提示符处使用:chcp 65001及其变体,但这并未改变任何内容。

我注意到通过搜索网络,其他人也有问题,但一直没能找到解决方案。我看起来像这是Windows和R如何交互的问题。不幸的是,我所有的三台电脑都有这个问题。它发生在WinXP-x32和Win7-x86下。

有没有办法让R覆盖Windows设置,否则可以解决问题? 我也尝试了其他网站,每当有待删除的文本中有é,ü,ä,等等时就会出现问题。

谢谢 罗杰

+4

交叉帖子,Ripley教授+1:https://stat.ethz.ch/pipermail/r-help/2011-May/277057.html – mdsumner 2011-05-04 11:01:52

+0

奇怪。我运行Windows 7(64位),你的代码在我的机器上完美运行。 – Andrie 2011-05-04 11:02:40

+1

只是在黑暗中拍摄:Set.setlocale文档建议更改会话中的编码可能会被忽略,不推荐使用。您可以尝试从命令行启动R,并按照[在此处]概述的方式声明编码(http://cran.r-project.org/doc/manuals/R-intro.html#Invoking-R-from-the-command -line) – joran 2011-07-15 01:14:30

回答

1

一个不完全的答案:

如果你看一下维基百科页面,更改浏览器的编码(在IE浏览器,查看 - >编码;在Firefox中,查看 - >字符编码)到西方(ISO-8869-1)或西方(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, "windows-1252", "ASCII", "") 
+1

我认为这可能是一个正确的答案。我会猜想第一个参数是'from',第二个参数是'to',所以为什么不呢:'iconv(Islands,“UTF-8”,“windows-1252”)? – 2016-07-06 00:14:47

0

无法复制该错误,但查看帮助文件很有用。

Sys.setlocale("LC_TIME", "de")  # Solaris: details are OS-dependent 
Sys.setlocale("LC_TIME", "de_DE.utf8") # Modern Linux etc. 
Sys.setlocale("LC_TIME", "de_DE.UTF-8") # ditto 
Sys.setlocale("LC_TIME", "de_DE") # OS X, in UTF-8 
Sys.setlocale("LC_TIME", "German") # Windows 

对于Windows,您应该使用“英文”或“Dutch_荷兰荷兰1252”等格式来更改这些设置。

我试图复制你的状态

> Sys.setlocale("LC_ALL","Dutch_Netherlands.1252") 
[1] "LC_COLLATE=Dutch_Netherlands.1252;LC_CTYPE=Dutch_Netherlands.1252;LC_MONETARY=Dutch_Netherlands.1252;LC_NUMERIC=C;LC_TIME=Dutch_Netherlands.1252" 
> Sys.getlocale() 
[1] "LC_COLLATE=Dutch_Netherlands.1252;LC_CTYPE=Dutch_Netherlands.1252;LC_MONETARY=Dutch_Netherlands.1252;LC_NUMERIC=C;LC_TIME=Dutch_Netherlands.1252" 

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

但是我不明白的奇怪的字符控制台,在我自己的语言环境“被标记为,但仍然是所有的功能仍然存在。

> Islands[1,1] 
[1] Hawaiʻi[27] 
8 Levels: Hawaiʻi[27] Kahoʻolawe[34] Kauaʻi[30] Lānaʻi[32] Maui[28] ... Oʻahu[29] 

而这些有趣的人物可以很容易地阅读,并从表中找到。

> Encoding(as.character("Hawaiʻi")) 
[1] "UTF-8" 
> Encoding(as.character(Islands[1,1])) 
[1] "UTF-8" 
> grep("Hawaiʻi", as.character(Islands[1,1])) 
[1] 1 

如果你还有将依靠其他地方,但改变你必须使用比Linux或OS X不同的名称Windows下的语言环境的问题(例如,见自己的区域设置信息)。在Windows中“荷兰语”可能就足够了。