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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。