當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。