在R(R Studio)中运行以下代码时:
writeLines("hello \U1F30D",useBytes = T)
我得到不同的结果。
有了PC,我得到了
hello ðŸŒ
或
writeLines("hello \U1F30D",useBytes = F)
hello <U+0001F30D>
使用Mac
writeLines("hello \U1F30D",useBytes = F)
hello
我认为该行为与机器无关。它应该是编码。但是我检查了R Studio的编码,两者都为UTF-8。所以现在我不知道为什么会有不同的行为,有人可以解释这些差异吗?
答案 0 :(得分:1)
我在这里为这个问题写了一个有点长的答案:https://kevinushey.github.io/blog/2018/02/21/string-encoding-and-r/
简短答案:writeLines("<text>", useBytes = FALSE)
将尝试将提供的文本重新编码为本地编码。这在使用UTF-8语言环境的Unix系统上有效(当今是默认设置),但在这种情况下(例如,在Windows上)将失败。实际上,您需要以下内容:
writeLines("<text>", file, useBytes = TRUE)
readLines(file, encoding = "UTF-8")
请注意,在Windows上诊断编码问题可能具有挑战性,因为R会相当积极地将UTF-8文本重新编码为本机编码(有时会尝试将UTF-8->本机-> UTF-8往返)转化通常是有损失的。