Read or Set the Declared Encodings for a Character Vector
Read or set the declared encodings for a character vector.
Encoding(x)Encoding(x) <- valueenc2native(x) enc2utf8(x)
- A character vector.
- A character vector of positive length.
Character strings in R can be declared to be encoded in
"UTF-8" or as
declarations can be read by
Encoding, which will return a
character vector of values
"unknown", or set, when
recycled as needed and other values are silently treated as
"unknown". ASCII strings will never be marked with a declared
encoding, since their representation is the same in all supported
encodings. Strings marked as
"bytes" are intended to be
non-ASCII strings which should be manipulated as bytes, and never
converted to a character encoding (so writing them to a text file is
enc2utf8 convert elements of character
vectors to the native encoding or UTF-8 respectively, taking any
marked encoding into account. They are primitive functions,
designed to do minimal copying.
There are other ways for character strings to acquire a declared
encoding apart from explicitly setting it (and these have changed as
R has evolved). Functions
parse have an
encoding argument that is used to
iconv declares encodings from its
to argument, and console input in suitable locales is also
intToUtf8 declares its output as
"UTF-8", and output text connections (see
textConnection) are marked if running in a
suitable locale. Under some circumstances (see its help page)
source(encoding=) will mark encodings of character
strings it outputs.
Most character manipulation functions will set the encoding on output
strings if it was declared on the corresponding input. These include
strsplit(useBytes = FALSE),
toupper as well as
sub(useBytes = FALSE) and
FALSE). Note that such functions do not preserve the
encoding, but if they know the input encoding and that the string has
been successfully re-encoded (to the current encoding or UTF-8), they
mark the output.
substr does preserve the encoding, and
preserve UTF-8 encoding on systems with Unicode wide characters. With
gsub will give a marked UTF-8 result if
any of the inputs are UTF-8.
A character vector.For
enc2utf8encodings are always marked: they are for
enc2nativein UTF-8 and Latin-1 locales.
## x is intended to be in latin1 x <- "fa\xE7ile" Encoding(x) Encoding(x) <- "latin1" x xx <- iconv(x, "latin1", "UTF-8") Encoding(c(x, xx)) c(x, xx) Encoding(xx) <- "bytes" xx # will be encoded in hex cat("xx = ", xx, "\n", sep = "")