У меня есть строка символов, содержащая данные в кодировке UTF-8 в виде обычного текста. Пример
utf8 = "#C2#BD"
Я пытаюсь получить символ для этого значения. В данном случае это будет "½
"
Если бы это было закодировано с использованием UTF-16, это было бы «00BD», я мог бы преобразовать это в символ, который фактически закодирован в utf8, выполнив
intToUtf8(strtoi('0x00BD'))
[1] "½"
Однако я не могу найти способ получить целочисленное значение, используя шестнадцатеричный код utf8 "#C2#BD".
В конечном итоге я хочу получить ½
от "#C2#BD". Я подозреваю, что путь туда идет от получения UTF-16, который можно преобразовать в целое число с помощью strtoi
, но мне трудно понять взаимосвязь между ними.
Это сделает это для этого примера:
utf8chars <- strsplit(utf8, "#")
# just grab the first entry, and leave off the blank
utf8chars <- utf8chars[[1]][-1]
# Convert the hex to integer
utf8int <- strtoi(paste0("0x",utf8chars))
# Then to raw
utf8raw <- as.raw(utf8int)
# And finally to character
utf8char <- rawToChar(utf8raw)
# On Windows you'll also need this
Encoding(utf8char) <- "utf-8"
Реальные примеры не должны требовать больших изменений...
utf8chars[[1]][-1]
лучше подходит для обобщения ("#E2#86#92"")