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


R utf8Conversion 將整數向量與 UTF-8 編碼的字符向量相互轉換


R語言 utf8Conversion 位於 base 包(package)。

說明

UTF-8 編碼的字符向量與表示 UTF-32 編碼的整數向量之間的轉換。

用法

utf8ToInt(x)
intToUtf8(x, multiple = FALSE, allow_surrogate_pairs = FALSE)

參數

x

要轉換的對象。

multiple

邏輯:應該轉換為單個字符串還是多個單獨的字符?

allow_surrogate_pairs

邏輯:是否應該嘗試解釋代理對? (請參閱“詳細信息”。)僅支持 multiple = FALSE

細節

這些將在任何區域設置中工作,包括在不支持多字節字符集的平台上。

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 個字節。

代理對範圍 0xD8000xDFFF 中的代碼點在 UTF-8 中被禁止,因此被 utf8ToInt 視為無效,默認情況下被 intToUtf8 視為無效。

‘noncharacters’ 的位置(特別是0xFFFE0xFFFF)在 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-devel大神的英文原創作品 Convert Integer Vectors to or from UTF-8-encoded Character Vectors。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。