странные персонажи: взаимодействие языка R и Windows? - PullRequest
12 голосов
/ 04 мая 2011

WinXP-x32, R-2.13.0

Уважаемый список,

У меня есть проблема, которая (я думаю) связана с взаимодействием между 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

Остров 19 ° 34 € N 155 ° 30 € WI / • 19,567 ° с.ш. 155,5 ° в.д. »/ 19,567; -155,5 2 Мауи [8] Остров Долины 20 ° 48… N 156 ° 20 € Wï »¿/ ¿»¿20,8 ° с.ш. 156,333 ° С» ¿/ 20,8; -156.333 3 KahoÊ »olawe [9] Целевой остров 20 ° 33 € N 156 ° 36 € / мин> 20,55 ° с.ш. 156,6 ° С »/ 20,55; -156.6 4 LÄnaÊ »i [10] Остров Ананас 20 ° 50 € N 156 ° 56 € WI ¿/ • 20,833 ° с.ш. 156,933 ° с.ш. / 20,833; -156,933 5 MolokaÊ »i [11] Остров Дружественных народов 21 ° 08 € N 157 ° 02 € WI ¿/ ï »¿21.133 ° N 157,033 ° С »/ 21,133; -157.033 6 OÊ »ahu [12] Место сбора 21 ° 28 € N 157 ° 59 € WI ¿/ ï »¿21,467 ° N 157,983 ° W» ¿/ 21,467; -157,983 7 KauaÊ »i [13] The Garden Isle 22 ° 05 € N 159 ° 30 € / мин> 22,083 ° N 159,5 ° С / С / 22,083; -159,5 8 NiÊ »ihau [14] Запретный остров
21 ° 54 € N 160 ° 10 € WI ¿/ ï ¿21,9 ° N 160,167 ° С »/ 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

Кроме того, я попытался внести изменение непосредственно из командной строки Windows, используя: chcp 65001 и его варианты, но это ничего не изменило.

При поиске в Интернете я заметил, что у других тоже есть проблема, но они не смогли найти решение. Похоже, это вопрос взаимодействия Windows и R. К сожалению, все три компьютера в моем распоряжении имеют эту проблему. Это происходит как под WinXP-x32, так и под Win7-x86.

Есть ли способ заставить R переопределить настройки Windows или проблему можно решить иначе? Я также пробовал другие веб-сайты, и эта проблема возникает каждый раз, когда в тексте, который нужно выковывать, есть é, ü, ä, î и так далее.

Спасибо, Roger

Ответы [ 2 ]

1 голос
/ 04 мая 2011

А не совсем ответ:

Если вы посмотрите страницу википедии и измените кодировку в своем браузере (в IE, View -> Encoding; в Firefox, View -> 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, "windows-1252", "ASCII", "")
0 голосов
/ 11 февраля 2015

Невозможно воспроизвести ошибку, однако полезно просмотреть файлы справки.

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

Для окон вы должны использовать форматирование, например «Английский» или «Dutch_Net Netherlands.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 достаточно «голландского», вероятно, достаточно.

...