如何找到WINDOWS-1252字符的内部代码表示?

时间:2011-03-05 16:42:38

标签: r

我正在处理来自问卷的SPSS数据,该问卷必须源自M $ Word。 Word会自动将连字符更改为长连字符,并转换为无法正确显示的字符,即“ - ”变为“ú”。

我的问题:WINDOWS-1252字符集中的utf8ToInt()相当于什么?

utf8ToInt("A")
[1] 65

当我使用自己的数据执行此操作时,出现错误:

x <- str_sub(levels(sd$j1)[1], 7, 7)
print(x)
[1] "ú"

utf8ToInt(x)
Error in utf8ToInt(x) : invalid UTF-8 string

但是,x的内容在grep和gsub表达式中完全可用。

> Sys.getlocale()
[1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"

3 个答案:

答案 0 :(得分:5)

如果您通过read.spss表单包 foreign 加载SPSS sav 文件,则可以通过指定编码来轻松导入具有正确编码的数据帧:

read.spss("foo.sav", reencode="CP1252")

答案 1 :(得分:5)

经过一番头疼,大量的阅读帮助文件和反复试验,我创建了两个小功能,可以满足我的需求。这些函数的工作原理是将输入转换为UTF-8,然后返回UTF-8编码字符向量的整数向量,反之亦然。

# Convert character to integer vector
# Optional encoding specifies encoding of x, defaults to current locale
encToInt <- function(x, encoding=localeToCharset()){
    utf8ToInt(iconv(x, encoding, "UTF-8"))
}

# Convert integer vector to character vector
# Optional encoding specifies encoding of x, defaults to current locale
intToEnc <- function(x, encoding=localeToCharset()){
    iconv(intToUtf8(x), "utf-8",  encoding)
}

一些例子:

x <- "\xfa"
encToInt(x)
[1] 250

intToEnc(250)
[1] "ú"

答案 2 :(得分:0)

我使用了Andrie代码的变体:

  • x上进行矢量化,以便将其应用于矢量/字符列
  • 通过简单地返回最后一个编码整数来处理由两个utf8字符编码的字符(例如&#34; \ u0098&#34;它给出c(194,152))。

这在例如将latin1 / cp1252字符映射到整数范围时很有用,这是我的应用程序(&#34;更紧凑的文件格式&#34;,他们说)。如果您需要在某个时刻将整数转换回字符,这显然是不合适的。

encToInt <- Vectorize(
  function(x, encoding){
    out <- utf8ToInt(iconv(x, encoding, "UTF-8"))
    out[length(out)]
  },
  vectorize.args="x", USE.NAMES = F, SIMPLIFY=T)