我正在尝试将.sav文件读入RStudio。该文件包含来自西班牙语调查的数据,当我将其读入R时 - 即使我的默认文本编码已设置为ISO-8859-1 - 特殊字符的显示也不正确。
例如,“Camión”一词显示为
"Cami<c3><b3>n"
即使它在PSPP中正确显示为“Camión”。
这就是我所做的:
install.packages("memisc")
jcv2014 <- as.data.set(spss.system.file('myfile.sav'))
后来,我想创建一个只包含变量标签的列表,所以我做了以下内容:
library(foreign)
jcv2014.spss <- read.spss("myfile.sav", to.data.frame=FALSE, use.value.labels=FALSE)
jcv2014_vars <- attr(jcv2014.spss, "variable.labels")
(我不确定这是否是最好的方法,但它有效)
无论如何,这一次,我仍然没有得到正确的口音,但有一种不同的编码:
一个应该是“¿Quécalificaciónledaría......”的变量标签反而出现了
"\302\277Qu\303\251 calificaci\303\263n le dar\303\255a..."
我不确定如何获得正确的字符,但它们在PSPP中正确显示。我尝试将R中的默认文本编码更改为ISO-8859-1和UTF-8,但无济于事。我不知道原始文件是什么编码的,但我猜它会是其中之一。
有什么想法吗?
如果它有帮助,我有R版3.1.1和OS X Yosemite版本10.10.1,我使用的是PSPP,而不是SPSS。
提前非常感谢!!!
答案 0 :(得分:2)
您可以在读取数据后设置编码吗?
# Here's your sentence
s <- "\302\277Qu\303\251 calificaci\303\263n le dar\303\255a..."
# it has no encoding
Encoding(s)
# [1] "unknown"
# but if you specify UTF-8, then it shows up correctly
iconv(s, 'UTF-8')
# [1] "¿Qué calificación le daría..."
# This also works
Encoding(s) <- 'UTF-8'
s
# [1] "¿Qué calificación le daría..."
以下是我sessionInfo()
电话的结果。你也应该发布你的。
> sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin13.1.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] reshape2_1.4 hexbin_1.27.0 ggplot2_1.0.0 data.table_1.9.2 yaml_2.1.13
[6] redshift_0.4 RJDBC_0.2-4 rJava_0.9-6 DBI_0.3.1
loaded via a namespace (and not attached):
[1] colorspace_1.2-4 digest_0.6.4 grid_3.1.1 gtable_0.1.2 labeling_0.2
[6] lattice_0.20-29 MASS_7.3-33 munsell_0.4.2 plyr_1.8.1 proto_0.3-10
[11] Rcpp_0.11.2 scales_0.2.4 stringr_0.6.2 tools_3.1.1
更新:看起来您可能没有支持UTF-8的区域设置。以下是我系统上每个类别的区域设置。您可以尝试使用Sys.setLocale()
并在系统上逐个更新它们(如果您觉得不需要逐步测试每个,请使用LC_ALL
)。 ?Sys.setLocale
了解更多信息
cat_str <- c("LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC",
"LC_TIME", "LC_MESSAGES", "LC_PAPER", "LC_MEASUREMENT")
sapply(cat_str, Sys.getlocale)
# LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC LC_TIME LC_MESSAGES
# "en_US.UTF-8" "en_US.UTF-8" "en_US.UTF-8" "C" "en_US.UTF-8" "en_US.UTF-8"
# LC_PAPER LC_MEASUREMENT
# "" ""