Декодирование строки кириллицы в R

#r #decode #encode #iconv

#r #декодирование #кодировать #iconv

Вопрос:

Я хотел бы расшифровать эту строку в R: обезпечен . Желаемый результат должен быть: обезпечен

Этот сайт предполагает, что исходная кодировка является UTF-8 и ее следует перекодировать в Windows-1251 . Итак, я безуспешно пытался это:

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

Комментарии:

1. Не уверен, почему это происходит именно так в R, но в python мы имеем &&t;&&t;&&t; "обезпечен".encode("cp1251").decode("utf-8") 'обезпечен'

Ответ №1:

Эти шаги, похоже, делают свое дело

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

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

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

Похоже, что в какой-то момент байты, составляющие tar&et значение UTF-8, были неверно истолкованы как закодированные в cp1251, и где-то был запущен процесс для преобразования байтов в UTF-8 на основе правил сопоставления cp1251-&&t; UTF-8. Однако, когда вы запускаете это для данных, которые на самом деле не закодированы в cp1251, вы получаете странные значения.

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

Комментарии:

1. Спасибо @MrFlick! Это решение действительно работает, но я все еще не понимаю интуиции, стоящей за ним.

2. @Svilen Похоже, что в какой-то момент байты tar&et были неверно истолкованы tar&et как кодированные cp1251, а не utf-8. Затем что-то вызвало повторное кодирование для преобразования в utf-8, что приводит к получению неверно закодированной версии: iconv(tar&et, from="cp1251", to="UTF-8") . Итак, в какой-то момент произошло некорректное преобразование. Решение выглядит странным, потому что оно исправляет странную ошибку, а не то, что должно произойти.