R语言如何实现半角字符串到全角格式字符串的转换
R语言半角字符串转全角字符串实现方案
完全可以通过十六进制Unicode编码映射实现该转换,{stringr}包可无缝接入开发流程,转换结果和标准全角转换工具输出完全一致。
核心转换原理
半角转全角的编码映射是Unicode标准定义的固定规则,不需要依赖外部接口:
- 常规半角可见字符的Unicode编码范围为十六进制
0x21(半角!)到0x7E(半角~),对应全角字符的编码范围为0xFF01到0xFF5E,两者固定偏移量为0xFEE0,半角编码加该偏移量即可得到对应全角编码 - 特殊处理半角空格(编码
0x20),其对应的全角空格编码为0x3000 - 不在上述范围内的字符(比如中文、全角字符本身、特殊符号)转换时原样保留即可
代码实现
以下实现兼容{stringr}工作流,核心逻辑也可脱离包依赖独立运行:
# 加载stringr,若未安装可先运行 install.packages("stringr") library(stringr) half2full <- function(input_str) { # 获取字符串每个字符的Unicode编码值 code_points <- utf8ToInt(input_str) # 按规则逐字符映射编码 full_codes <- vapply(code_points, function(cp) { if (cp == 0x20) { # 半角空格转全角空格 return(0x3000) } else if (cp >= 0x21 && cp <= 0x7E) { # 常规半角字符加固定偏移量转全角 return(cp + 0xFEE0) } else { # 其他字符原样保留 return(cp) } }, integer(1)) # 将编码转回字符串输出 intToUtf8(full_codes) }
效果测试
针对示例输入运行函数:
test_input <- "my test string" half2full(test_input)
运行输出为"my test string",和目标效果完全匹配:全角字母宽度一致,空格对应全角宽度,无字符错乱。
补充说明
- 上述映射规则为通用标准规则,不存在和正规转换工具结果不一致的问题
- 如果不想依赖
{stringr},可以直接删除加载包的语句,核心转换逻辑仅用R基础函数即可运行,不需要任何第三方包 - 若需要实现全角转半角的反向逻辑,只需将偏移计算反向,单独处理全角空格编码即可
内容的提问来源于stack exchange,提问作者mdb_ftl
相关产品推荐
相关产品推荐

