You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中将数据框中特殊加粗格式的字符串转为标准格式?

解决R中特殊加粗Unicode字符串转标准格式的问题

你遇到的这种特殊加粗字符串(如𝐇𝐚𝐢𝐝𝐚𝐫𝐚)属于Unicode中的数学式加粗拉丁字母,这类字符的编码与普通拉丁字母完全独立,导致R控制台显示异常。无需回到Excel修改,直接在R中即可完成转换:

方法一:使用stringi包快速转换(推荐)

stringi包的stri_trans_general()函数支持Unicode标准化转换,其中NFKC规则可直接将这类兼容变体字符转换为标准字符:

# 首次使用需安装包
install.packages("stringi")
library(stringi)

# 转换示例
bold_string <- "𝐇𝐚𝐢𝐝𝐚𝐫𝐚"
normal_string <- stri_trans_general(bold_string, "NFKC")
print(normal_string)
# 输出: [1] "Haidera"

方法二:Base R手动编码映射(无需外部包)

如果不想依赖第三方包,可通过字符编码的对应关系手动转换:数学加粗大写字母的Unicode范围为U+1D400至U+1D433(对应普通大写A-Z),小写为U+1D434至U+1D467(对应普通小写a-z),编写转换函数即可:

convert_bold_to_normal <- function(input_str) {
  # 拆分字符串为单个字符
  char_vec <- strsplit(input_str, "")[[1]]
  # 获取每个字符的Unicode编码
  code_vec <- utf8ToInt(char_vec)
  
  # 替换大写加粗字符
  upper_mask <- code_vec >= 0x1D400 & code_vec <= 0x1D433
  code_vec[upper_mask] <- code_vec[upper_mask] - 0x1D400 + 0x41
  
  # 替换小写加粗字符
  lower_mask <- code_vec >= 0x1D434 & code_vec <= 0x1D467
  code_vec[lower_mask] <- code_vec[lower_mask] - 0x1D434 + 0x61
  
  # 转换回字符串
  intToUtf8(code_vec)
}

# 测试转换
bold_string <- "𝐇𝐚𝐢𝐝𝐚𝐫𝐚"
convert_bold_to_normal(bold_string)
# 输出: [1] "Haidera"

原理说明

这类特殊加粗字符是Unicode为数学公式场景设计的专用兼容性字符,它们与普通拉丁字母无直接编码关联,但通过Unicode标准化(NFKC)或编码偏移计算,可映射回对应的标准拉丁字母,解决显示和后续数据处理问题。

内容的提问来源于stack exchange,提问作者Will M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:40:49