Как насчет этого:
x <- "bi<df>chen Z<fc>rcher hello world <c6>"
m <- gregexpr("<[0-9a-f]{2}>", x)
codes <- regmatches(x, m)
chars <- lapply(codes, function(x) {
rawToChar(as.raw(strtoi(paste0("0x", substr(x,2,3)))), multiple = TRUE)
})
regmatches(x, m) <- chars
x
# [1] "bi\xdfchen Z\xfcrcher hello world \xc6"
Encoding(x) <- "latin1"
x
# [1] "bißchen Zürcher hello world Æ"
Обратите внимание, что вы не можете сделать escape-символ, вставив «\ x» в начало номера. То, что «\ x» действительно отсутствует в строке. Именно так R выбирает представление на экране. Здесь используйте rawToChar()
, чтобы превратить число в нужный символ.
Я тестировал это на Mac, поэтому мне нужно было установить кодировку на «latin1», чтобы увидеть правильные символы в консоли. Просто использование одного байта, подобного этому, не является правильным UTF-8.