具有特殊字符的 writeLines 行为
writeLines behavior with special characters
当 运行 R (R Studio) 中的以下行时:
writeLines("hello \U1F30D",useBytes = T)
我得到不同的结果。
有了电脑,我得到了
hello ðŸŒ
或
writeLines("hello \U1F30D",useBytes = F)
hello <U+0001F30D>
还有 mac
writeLines("hello \U1F30D",useBytes = F)
hello
我认为该行为不是由于 machine。应该是编码。但是我检查了 R Studio 的编码,两者都是 UTF-8。所以现在我不知道为什么会有不同的行为,任何人都可以解释这些差异吗?
我在这里对这个问题写了一个有点长的答案: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) 并且这种转换通常是有损的。
当 运行 R (R Studio) 中的以下行时:
writeLines("hello \U1F30D",useBytes = T)
我得到不同的结果。
有了电脑,我得到了
hello ðŸŒ
或
writeLines("hello \U1F30D",useBytes = F)
hello <U+0001F30D>
还有 mac
writeLines("hello \U1F30D",useBytes = F)
hello
我认为该行为不是由于 machine。应该是编码。但是我检查了 R Studio 的编码,两者都是 UTF-8。所以现在我不知道为什么会有不同的行为,任何人都可以解释这些差异吗?
我在这里对这个问题写了一个有点长的答案: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) 并且这种转换通常是有损的。