Просто чтобы подвести итог, что здесь произошло. "\ X" НЕ является частью строки. Это просто, как R избегает значений, которые он не может печатать иначе. В случае «gesh \ xfc» первые 4 символа являются основными символами ASCII, но последний кодированный символ - «\ xfc». В кодировке latin1 (которую Windows использует по умолчанию) символ fc
является символом «ü». Так что в моей машине Windows, я вижу
x <- "gesh\xfc"
x
# [1] "geshü"
И вы можете посмотреть необработанные байты этой строки с помощью
charToRaw("gesh\xfc")
# [1] 67 65 73 68 fc
Вы можете видеть шестнадцатеричные коды символов ASCII для первых 4 значений, а затем вы можете видеть, что \x
фактически использовался только для включения кода символа "fc" в строку. Сама строка имеет только 5 «символов».
Но если вы не используете latin1
, символ "fc" не сопоставляется ни с чем. По сути, эта строка не имеет никакого смысла в кодировке utf-8, которую по умолчанию использует mac. Вы можете конвертировать в utf-8 с помощью
iconv("gesh\xfc", "latin1", "utf-8")
Но так как вы получили этот файл путем импорта текстового файла, проблема заключалась в том, что R не знал, что кодировка файла не была UTF-8, поэтому вы получили эти странные значения. Вы должны сообщить fread
, что файл пришел из windows, чтобы он мог правильно импортировать строки с самого начала
fread(file, encoding = "Latin-1")
Вам необходимо знать, какая кодировка использовалась для создания файла, который вы импортируете, особенно когда он сделан кем-то другим. Программы не могут правильно угадать.