For historical reasons, R translates strings to the native encoding
when they are converted to symbols. This string-to-symbol
conversion is not a rare occurrence and happens for instance to the
names of a list of arguments converted to a call by do.call()
.
If the string contains unicode characters that cannot be
represented in the native encoding, R serialises those as an ASCII
sequence representing the unicode point. This is why Windows users
with western locales often see strings looking like <U+xxxx>
. To
alleviate some of the pain, rlang parses strings and looks for
serialised unicode points to translate them back to the proper
UTF-8 representation. This transformation occurs automatically in
functions like env_names()
and can be manually triggered with
as_utf8_character()
and chr_unserialise_unicode()
.
chr_unserialise_unicode(chr)
chr | A character vector. |
---|
This function is experimental.
ascii <- "<U+5E78>" chr_unserialise_unicode(ascii) #> [1] "幸" identical(chr_unserialise_unicode(ascii), "\u5e78") #> [1] TRUE