【问题标题】:Decoding Cyrillic string in R在R中解码西里尔字符串
【发布时间】:2020-08-18 13:26:33
【问题描述】:

我想在 R 中解码这个字符串:обезпечен。期望的输出应该是:обезпечен

这个site建议源编码是UTF-8,应该转码为Windows-1251。所以我尝试了这个没有成功:

> word <- "обезпечен"
> iconv(word, from = "UTF-8",to = "Windows-1251")
[1] "обезпечен"

【问题讨论】:

  • 不知道为什么在 R 中会这样,但在 python 中我们有 &gt;&gt;&gt; "обезпечен".encode("cp1251").decode("utf-8") 'обезпечен'

标签: r decode encode iconv


【解决方案1】:

这些步骤似乎可以解决问题

word <- "обезпечен"

xx <- iconv(word, from="UTF-8", to="cp1251")
Encoding(xx) <- "UTF-8"
xx
# [1] "обезпечен"

target <- "обезпечен"
xx == target
# [1] TRUE

所以看起来发生的事情是在某一时刻构成 UTF-8 target 值的字节被误解为是 cp1251 编码的,并且在某个地方运行了一个进程以基于 cp1251-> 将字节转换为 UTF-8 UTF-8 映射规则。然而,当你在没有真正 cp1251 编码的数据上运行它时,你会得到奇怪的值。

iconv(target, from="cp1251", to="UTF-8")
# "обезпечен"

【讨论】:

  • 谢谢@MrFlick!这个解决方案确实有效,但我还是不明白它背后的直觉。
  • @Svilen 似乎target 的字节被误解为target 是cp1251 编码而不是utf-8 编码。然后某些东西触发了重新编码以转换为 utf-8,这会使您得到错误的编码版本:iconv(target, from="cp1251", to="UTF-8")。所以在某些时候发生了不正确的转换。该解决方案看起来很奇怪,因为它正在修复一个奇怪的错误,而不是预期会发生的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多