utf8Conversion
位於 base
包(package)。 說明
UTF-8 編碼的字符向量與表示 UTF-32 編碼的整數向量之間的轉換。
用法
utf8ToInt(x)
intToUtf8(x, multiple = FALSE, allow_surrogate_pairs = FALSE)
參數
x |
要轉換的對象。 |
multiple |
邏輯:應該轉換為單個字符串還是多個單獨的字符? |
allow_surrogate_pairs |
邏輯:是否應該嘗試解釋代理對? (請參閱“詳細信息”。)僅支持 |
細節
這些將在任何區域設置中工作,包括在不支持多字節字符集的平台上。
Unicode 定義了它所包含的所有字形的名稱和編號:這些數字稱為代碼點:自 RFC3629 起,它們從 0
運行到 0x10FFFF
(大約 5% 由 Unicode 標準 13.0 版本分配,7 % 保留供“私人使用”)。
intToUtf8
默認情況下不處理代理對:代理範圍中的輸入映射到 NA
。如果 UTF-16 字節流被讀取為 2 字節整數(以正確的字節順序),則可能會發生這種情況,在這種情況下 allow_surrogate_pairs = TRUE
將嘗試解釋它們(不匹配的代理值仍被視為 NA
)。
值
utf8ToInt
將以 UTF-8 編碼的長度為 1 的字符串轉換為 Unicode 代碼點的整數向量。
intToUtf8
將 Unicode 代碼點的數值向量(默認)轉換為單個字符串或單個字符的字符向量。非整數數值將被截斷為整數。對於輸出到單個字符串 0
會被靜默省略:否則 0
會映射到 ""
。非 NA
返回值的 Encoding
聲明為 "UTF-8"
。
無效輸入和 NA
輸入映射到 NA
輸出。
有效性
在 UTF-8 的生命周期中,哪些代碼點被視為有效已經發生了變化。最初,所有 32 位無符號整數都可能有效,並且可以轉換為 UTF-8 中最多 6 個字節。自 2003 年以來,人們一直聲稱永遠不會有大於 0x10FFFF
的有效代碼點,因此有效的 UTF-8 編碼永遠不會超過 4 個字節。
代理對範圍 0xD800
到 0xDFFF
中的代碼點在 UTF-8 中被禁止,因此被 utf8ToInt
視為無效,默認情況下被 intToUtf8
視為無效。
‘noncharacters’ 的位置(特別是0xFFFE
和0xFFFF
)在 2013 年的“勘誤表 9”中得到了澄清。這些是有效的,但永遠不會給出官方解釋。 (在某些早期版本中R utf8ToInt
將它們視為無效。)
例子
## will only display in some locales and fonts
intToUtf8(0x03B2L) # Greek beta
utf8ToInt("bi\u00dfchen")
utf8ToInt("\xfa\xb4\xbf\xbf\x9f")
## A valid UTF-16 surrogate pair (for U+10437)
x <- c(0xD801, 0xDC37)
intToUtf8(x)
intToUtf8(x, TRUE)
(xx <- intToUtf8(x, , TRUE)) # will only display in some locales and fonts
charToRaw(xx)
## An example of how surrogate pairs might occur
x <- "\U10437"
charToRaw(x)
foo <- tempfile()
writeLines(x, file(foo, encoding = "UTF-16LE"))
## next two are OS-specific, but are mandated by POSIX
system(paste("od -x", foo)) # 2-byte units, correct on little-endian platforms
system(paste("od -t x1", foo)) # single bytes as hex
y <- readBin(foo, "integer", 2, 2, FALSE, endian = "little")
sprintf("%X", y)
intToUtf8(y, , TRUE)
參考
https://www.rfc-editor.org/rfc/rfc3629, the current standard for UTF-8.
https://www.unicode.org/versions/corrigendum9.html for non-characters.
相關用法
- R unlist 展平列表
- R unlink 刪除文件和目錄
- R unname 刪除名稱或暗名稱
- R userhooks 獲取和設置加載、附加、分離和卸載鉤子的函數
- R units 單位
- R unique 提取獨特元素
- 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-devel大神的英文原創作品 Convert Integer Vectors to or from UTF-8-encoded Character Vectors。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。