2011-05-04 78 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中「荷蘭語」可能就足夠了。