r - R 中的非 ASCII 字符,从 .sav 文件中读取

标签 r character-encoding spss non-ascii-characters

我正在尝试将 .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ón le darí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。

非常感谢提前!!!

最佳答案

读入数据后,您可以设置编码吗?

# 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 
# ""             "" 

关于r - R 中的非 ASCII 字符,从 .sav 文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27368118/

相关文章:

r - 非常困惑如何合并两个图像来创建 gif

java - 在 Rstudio 中初始化 h2o : not recognising 64-bit java

python - sys.stdout.encoding为None时怎么办?

unicode - RENAME VARIABLES 的 SPSS 问题

r - 处理 R 重新编码中缺少的系统?

R 插入符保留样本和测试集 ROC

r - 使用 igraph 将节点属性分配给边权重

swift - 字符无法转换为字符串

php - 警告 mb_convert_encoding() 未知编码 "WINDOWS-1256"

spss - SPSS 病例数变量