#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")
. Итак, в какой-то момент произошло некорректное преобразование. Решение выглядит странным, потому что оно исправляет странную ошибку, а не то, что должно произойти.