Когда вы присваиваете шестнадцатеричные коды, такие как \xe0\xae\xa8\xe0...
, строке, R не знает, как они предназначены для интерпретации, поэтому он предполагает кодирование текущей локали на вашем компьютере.В наши дни в большинстве современных систем на основе Unix это будет UTF-8, поэтому, например, на Mac ваша строка отображается как
> x
[1] "நடிகர் சூர்யா செய்த உதவி மிக முக்கியமானது!' - டெல்டாவில் நெகிழ்ந்த சீமான்"
, что, я полагаю, является правильным отображением.Google Translate распознает его как написанный на тамильском.
Однако в Windows он отображается нечитаемо.В моей системе Windows 10 я вижу
> x
[1] "நடிகர௠சூரà¯à®¯à®¾ செயà¯à®¤ உதவி மிக à®®à¯à®•à¯à®•à®¿à®¯à®®à®¾à®©à®¤à¯!' - டெலà¯à®Ÿ
, потому что она использует кодовую страницу, соответствующую кодировке Latin1, что неправильно для этой строки.Чтобы заставить его правильно отображаться в Windows, вам нужно сообщить R, что он закодирован в UTF-8, объявив его кодировку:
Encoding(x) <- "UTF-8"
Затем он также будет отображаться правильно в Windows, что решает вашу проблему.
Для других, пытающихся сделать это, важно знать, что есть только несколько значений, которые работают таким образом.Вы можете объявить кодировку "UTF-8"
, "latin1"
, "bytes"
или "unknown"
.«неизвестный» означает локальную кодировку на машине, «байты» означает, что она вообще не должна интерпретироваться как символы.Если ваша строка имеет другую кодировку, вам нужно использовать другой подход: преобразовать в одну из кодировок, о которых R знает.
Например, строка
x <- "\xb4\xde\xd1\xe0\xde\xd5 \xe3\xe2\xe0\xde"
имеет русскую кодировкув ИСО 8859-5.В системе, где это была локальная кодировка, она отображалась бы правильно, а в моей - с использованием шестнадцатеричных кодов.Чтобы он отображался правильно, мне нужно преобразовать его в UTF-8, используя
y <- iconv(x, from="ISO8859-5", to="UTF-8")
. Затем он будет отображаться как [1] "Доброе утро"
.Вы можете увидеть полный список кодировок, которые iconv()
знает об использовании iconvlist()
.