当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R Encoding 读取或设置字符向量声明的编码


R语言 Encoding 位于 base 包(package)。

说明

读取或设置字符向量的声明编码。

用法

Encoding(x)

Encoding(x) <- value

enc2native(x)
enc2utf8(x)

参数

x

字符向量。

value

正长度的字符向量。

细节

中的字符串R可以声明为编码为"latin1"或者"UTF-8"或作为"bytes"。这些声明可以通过以下方式阅读:Encoding,这将返回值的字符向量"latin1","UTF-8" "bytes"或者"unknown",或设置,当value根据需要被回收,其他值被默默地视为"unknown"。 ASCII 字符串永远不会用声明的编码进行标记,因为它们的表示在所有支持的编码中都是相同的。字符串标记为"bytes"旨在作为非 ASCII 字符串,应将其作为字节进行操作,并且永远不会转换为字符编码(因此仅支持将它们写入文本文件writeLines(useBytes = TRUE))。

enc2nativeenc2utf8 将字符向量的元素分别转换为本机编码或 UTF-8,同时考虑任何标记的编码。它们是 primitive 函数,旨在进行最少的复制。

除了显式设置它之外,字符串还有其他方法来获取声明的编码(这些方法已更改为R进化了)。解析器标记包含‘的字符串⁠\u⁠' 或者 '⁠\U⁠’逃脱了。函数scan,read.table,readLines, 和parse有一个encoding用于声明编码的参数,iconv从其声明编码to参数,并且还声明了合适区域设置中的控制台输入。intToUtf8将其输出声明为"UTF-8",并输出文本连接(参见textConnection) 如果在合适的区域设置中运行,则会被标记。在某些情况下(请参阅其帮助页面)source(encoding=)将标记其输出的字符串的编码。

如果在相应的输入上声明了编码,大多数字符操作函数都会在输出字符串上设置编码。其中包括 chartrstrsplit(useBytes = FALSE)tolowertoupper 以及 sub(useBytes = FALSE)gsub(useBytes = FALSE) 。请注意,此类函数不会保留编码,但如果它们知道输入编码并且字符串已成功重新编码(到当前编码或 UTF-8),它们就会标记输出。

substr 确实保留编码,而 chartrtolowertoupper 在具有 Unicode 宽字符的系统上保留 UTF-8 编码。如果任何输入是 UTF-8,则使用 fixedperl 选项, strsplitsubgsub 将给出标记的 UTF-8 结果。

如果任何相应输入被标记为字节,pastesprintf 返回标记为字节的元素;如果任何输入被标记为 UTF-8,则返回标记为 UTF-8 的元素。

如果任何元素标记为 UTF-8,则 matchpmatchcharmatchduplicatedunique 在 UTF-8 中全部匹配。

从正在运行的 R 会话更改当前编码可能会导致混乱(请参阅Sys.setlocale)。

“Latin-1”语言环境的含义存在一些含糊之处,因为某些操作系统(尤其是 Windows)使用 ISO 8859-1 字符集中未定义的字符位置(或用于控制字符)。如何解释这些字符取决于系统,但从R3.5.0 如果可能的话,在转换为例如 3.5.0 时,它们会按照 Windows 代码页 1252(微软称之为“Windows Latin 1 (ANSI)”)进行解释。 UTF-8。

字符向量。

对于 enc2utf8 编码,始终进行标记:它们适用于 UTF-8 和 Latin-1 语言环境中的 enc2native

例子

## x is intended to be in latin1
x. <- x <- "fran\xE7ais"
Encoding(x.) # "unknown" (UTF-8 loc.) | "latin1" (8859-1/CP-1252 loc.) | ....
Encoding(x) <- "latin1"
x
xx <- iconv(x, "latin1", "UTF-8")
Encoding(c(x., x, xx))
c(x, xx)
xb <- xx; Encoding(xb) <- "bytes"
xb # will be encoded in hex
cat("x = ", x, ", xx = ", xx, ", xb = ", xb, "\n", sep = "")
(Ex <- Encoding(c(x.,x,xx,xb)))
stopifnot(identical(Ex, c(Encoding(x.), Encoding(x),
                          Encoding(xx), Encoding(xb))))

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Read or Set the Declared Encodings for a Character Vector。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。