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)
)。
enc2native
和 enc2utf8
將字符向量的元素分別轉換為本機編碼或 UTF-8,同時考慮任何標記的編碼。它們是 primitive 函數,旨在進行最少的複製。
除了顯式設置它之外,字符串還有其他方法來獲取聲明的編碼(這些方法已更改為R進化了)。解析器標記包含‘的字符串\u' 或者 '\U’逃脫了。函數scan
,read.table
,readLines
, 和parse
有一個encoding
用於聲明編碼的參數,iconv
從其聲明編碼to
參數,並且還聲明了合適區域設置中的控製台輸入。intToUtf8
將其輸出聲明為"UTF-8"
,並輸出文本連接(參見textConnection
) 如果在合適的區域設置中運行,則會被標記。在某些情況下(請參閱其幫助頁麵)source(encoding=)
將標記其輸出的字符串的編碼。
如果在相應的輸入上聲明了編碼,大多數字符操作函數都會在輸出字符串上設置編碼。其中包括 chartr
、 strsplit(useBytes = FALSE)
、 tolower
和 toupper
以及 sub(useBytes = FALSE)
和 gsub(useBytes =
FALSE)
。請注意,此類函數不會保留編碼,但如果它們知道輸入編碼並且字符串已成功重新編碼(到當前編碼或 UTF-8),它們就會標記輸出。
substr
確實保留編碼,而 chartr
、 tolower
和 toupper
在具有 Unicode 寬字符的係統上保留 UTF-8 編碼。如果任何輸入是 UTF-8,則使用 fixed
和 perl
選項, strsplit
、 sub
和 gsub
將給出標記的 UTF-8 結果。
如果任何相應輸入被標記為字節,paste
和 sprintf
返回標記為字節的元素;如果任何輸入被標記為 UTF-8,則返回標記為 UTF-8 的元素。
如果任何元素標記為 UTF-8,則 match
、 pmatch
、 charmatch
、 duplicated
和 unique
在 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 Extremes 最大值和最小值
- R Extract 提取或替換對象的部分
- R Extract.factor 提取或替換部分因子
- R Extract.data.frame 提取或替換 DataFrame 的部分內容
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 將文本推回連接
- R strsplit 分割字符向量的元素
- R seq.Date 生成規則的日期序列
- R invisible 將打印模式更改為不可見
- R noquote “無引號”字符串打印類
- R warning 警告信息
- R rapply 遞歸地將函數應用於列表
- R basename 操作文件路徑
- R with 評估數據環境中的表達式
- R formals 訪問和操縱形式參數
- R icuSetCollate 按 ICU 設置整理
- R search 給出 R 對象的搜索路徑
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Read or Set the Declared Encodings for a Character Vector。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。