R中的编码和原始

R中的编码和原始,r,character-encoding,R,Character Encoding,我不确定这是否是一个bug。如果我将其中一个字符编码为UTF-8,然后再转换为raw并返回,则字符不相同。我已经在RStudio中将默认编码设置为“UTF-8” rawToChar(charToRaw(enc2utf8("vægt"))) [1] "vægt" rawToChar(charToRaw("vægt")) [1] "vægt" 这是我的sessionInfo() 这是我对所发生事情的基本理解 首先是一些编码事实: Encoding chara

我不确定这是否是一个bug。如果我将其中一个字符编码为UTF-8,然后再转换为raw并返回,则字符不相同。我已经在RStudio中将默认编码设置为“UTF-8”

rawToChar(charToRaw(enc2utf8("vægt")))
[1] "vægt"

rawToChar(charToRaw("vægt"))
[1] "vægt"
这是我的sessionInfo()


这是我对所发生事情的基本理解

首先是一些编码事实:

                  Encoding
character    UTF-8        CP1252
   v         76             76
   æ         c3 a6          e6
   g         67             67
   t         74             74
   Ã         c3 83          c3
   ¦         c2 a6          a6
现在机械师:

Windows计算机使用的编码可以从
sessionInfo
输出中看到。因此,R脚本中的
vægt
字符串表示为字节
76 e6 67 74
。这一点可通过
charToRaw(“vægt”)
得到证实。如果我们随后将其转换为UTF-8,我们将得到
76 c3 a6 67 74
。这些字节表示UTF-8的事实丢失了。稍后
rawToChar()
将这些字节转换回字符串,再次假定为CP1252。由于CP1252中的
c3
Ã
a6
,我们得到
vÃgt

另一方面,在Mac和Linux上,默认编码始终为UTF-8,并且不会出现编码不匹配的情况。然而,我怀疑,通过显式地更改/设置R使用的编码,可能会触发与Windows上相同的现象


我不认为这是一个bug。

在我的Windows 10计算机上得到确认,但在我的Linux计算机上运行良好。我认为这是一个仅限Windows的问题。这是我在使用不同的xml包时遇到的问题。有人能解释为什么在xml包中的charToRaw之前需要enc2utf8吗?你不能代表作者说话,但我只是想了解为什么会这样做,以及我是否可以建议删除enc2utf8而不引起很多新问题。什么是
charToRaw(“vægt”)
返回显示“问题”的Windows机器?我怀疑
76 e6 67 74
。有人能证实这一点吗,我附近没有。
charToRaw(“vægt”)
返回:
76 e6 67 74
charToRaw(enc2utf8(“vægt”)
返回:
76 c3 a6 67 74
感谢您的解释!现在我想我理解了
rawToChar
帮助中的这一行:斜体在任何一种情况下都可能创建一个在多字节区域设置中无效的结果,例如使用UTF-8的结果。italic我对此无能为力,因为我无法在Windows中仅为R更改区域设置(这是我从工作中获得的一台计算机,所以我无法更改语言)?
                  Encoding
character    UTF-8        CP1252
   v         76             76
   æ         c3 a6          e6
   g         67             67
   t         74             74
   Ã         c3 83          c3
   ¦         c2 a6          a6