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