Questa non è una risposta perfetta, ma la seguente soluzione ha risolto il problema per me. Ho cercato di capire il comportamento o R, e fare l'esempio in modo che il mio script R produce gli stessi risultati sia su Windows e su piattaforma Linux:
(1) Ottenere dati XML in UTF-8 da Internet
library(XML)
url <- "http://hydrodata.info/chmi-h/cuahsi_1_1.asmx/GetSiteInfoObject?site=CHMI-H:1263&authToken="
doc <- xmlRoot(xmlTreeParse(url, getDTD=FALSE, useInternalNodes = TRUE))
infoList <- xmlToList(doc[[2]][[1]])
siteName <- infoList$siteName
(2) Stampare il testo da Internet: la codifica è UTF-8, visualizzazione nella console R è anche corretto utilizzando sia il ceco e il locale inglese su Windows:
> Sys.getlocale(category="LC_CTYPE")
[1] "English_United States.1252"
> print(siteName)
[1] "Koryčany nad přehradou"
> Encoding(siteName)
[1] "UTF-8"
>
(3) Prova a creare e visualizzare un data.frame. Questo ha un problema. I display data.frame correttamente sia nella vista RStudio e nella console:
df <- data.frame(name=siteName, id=1)
df
name id
1 Korycany nad prehradou 1
(4) Prova di utilizzare una matrice invece. Sorprendentemente la matrice viene visualizzata correttamente nella console R.
m <- as.matrix(df)
View(m) #this shows incorrectly in RStudio
m #however, this shows correctly in the R console.
name id
[1,] "Koryčany nad přehradou" "1"
(5) Modificare le impostazioni locali. Se sono su Windows, imposta la locale in ceco. Se sono su Unix o Mac, imposta la locale su UTF-8. NOTA: questo ha alcuni problemi quando eseguo lo script in RStudio, apparentemente RStudio non reagisce sempre immediatamente al comando Sys.setlocale.
#remember the original locale.
original.locale <- Sys.getlocale(category="LC_CTYPE")
#for Windows set locale to Czech. Otherwise set locale to UTF-8
new.locale <- ifelse(.Platform$OS.type=="windows", "Czech_Czech Republic.1250", "en_US.UTF-8")
Sys.setlocale("LC_CTYPE", new.locale)
(7) Scrivere i dati in un file di testo. IMPORTANTE: non utilizzare write.csv
ma utilizzare write.table
. Quando il mio locale è Czech
sul mio Windows inglese, devo usare lo fileEncoding="UTF-8"
nel write.table
. Ora il file di testo appare correttamente in notepad ++ e anche in Excel.
write.table(m, "test-czech-utf8.txt", sep="\t", fileEncoding="UTF-8")
(8) Impostare l'impostazione internazionale indietro originale
Sys.setlocale("LC_CTYPE", original.locale)
(9) Provate a leggere il file di testo di nuovo in R. NOTA: Se leggo il file, ho dovuto impostare il encoding
parametro (NON fileEncoding!). La visualizzazione di un data.frame lettura dal file non è ancora corretta, ma quando si converte il mio data.frame
ad un matrix
l'UTF-8 Repubblica caratteri sono conservati:
data.from.file <- read.table("test-czech-utf8.txt", sep="\t", encoding="UTF-8")
#the data.frame still has the display problem, "č" and "ř" get "lost"
> data.from.file
name id
1 Korycany nad prehradou 1
#see if a matrix displays correctly: YES it does!
matrix.from.file <- as.matrix(data.from.file)
> matrix.from.file
name id
1 "Koryčany nad přehradou" "1"
Quindi la lezione imparata è che ho bisogno di convertire il mio data.frame
su un matrix
, imposta il mio locale su Czech
(su Windows) o su UTF-8
(su Mac e Linux) prima di scrivere i miei dati con caratteri cechi su un file.Quindi quando scrivo il file, devo assicurarmi che fileEncoding
debba essere impostato su UTF-8. D'altra parte, quando in seguito leggerò il file, posso continuare a lavorare nelle impostazioni locali in inglese, ma in read.table
devo impostare lo encoding="UTF-8"
.
Se qualcuno ha una soluzione migliore, accolgo con favore i vostri suggerimenti.
È possibile modificare le impostazioni internazionali in CZ e risolverlo in questo modo? – thelatemail
una soluzione parziale per me era: 'Sys.setLocale (locale =" Czech ")' per visualizzare correttamente data.frame come 'Koryčany nad přehradou' in R. Ma ora quando uso' write.csv (df, "test .csv ")' e apri test.csv in Excel o nel Blocco note, il testo appare come: 'Koryèany nad pøehradou' nel file csv. L'unico modo per risolvere il problema era aprire il file csv in Notepad ++ e cambiare la codifica del file in Windows-1250. – jirikadlec2
Non sono convinto che si tratti di un duplicato esatto. L'altra domanda sembra concentrarsi su un problema di visualizzazione, in cui sembra che questo stia effettivamente cambiando l'archiviazione dei dati: il duplicato precedente: http://stackoverflow.com/questions/17715956/why-do-some-unicode-characters -display-in-matrici-ma-non-data-frames-in-r? lq = 1 – thelatemail