【发布时间】:2011-03-05 16:42:37
【问题描述】:
我正在处理来自 M$ Word 的调查问卷中的 SPSS 数据。 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"
【问题讨论】:
-
祝你好运尝试在 R for Windows 中使用 Unicode 文本做任何事情!
-
你的问题是“ú”没有编码为UTF-8。它实际上是“\xfa”,并以 R 所称的 latin1 编码,但我想象的实际上是 1252。 Windows 有一种完全不同的处理 Unicode 文本的方式,我不相信 Windows 上的 R 会努力以 Windows 的方式来处理它。我向你表示同情,但我不能提供更多!
-
@David Hefferman,非常感谢您的洞察力和同情!不过,有没有办法确定这个 latin1 字符的内部表示,比如 latin1ToInt() - 我还没有找到。而且,反之亦然,如果我知道 Latin1 代码是 150,我如何生成实际字符,同样类似于 intToLatin1()?
-
@Andrie 非常抱歉,但我没有什么可提供的。我发现 R 文档帮助不大,我非常担心它是为使用字节流和语言环境的基于 UNIX 的系统开发的,并且没有考虑到基于 UTF-16 的 Windows Unicode。
-
@David 谢谢。我的代码现在可以使用,我真的不需要知道这些代码。为了在未来的项目中重用这项工作,一个笨拙的解决方法是创建非打印字符及其 ASCII 等效项的哈希表,然后为未来的项目创建 save() 和 load()。非常感谢您的帮助。
标签: r