RStudio使用tidyverse时中、希伯来等多语言字符控制台显示异常问题
问题原因
这个属于tidyverse生态下tibble/pillar包的默认设计逻辑,不属于可修复的功能bug:
- tibble控制台打印依赖pillar包的格式化逻辑,为了兼容老旧、不支持全Unicode字符的终端环境,默认会将不在当前系统locale覆盖范围内的字符转换为
<U+XXXX>的编码格式输出 - base R的data.frame打印逻辑、RStudio的
View()窗口都直接调用系统/软件内置的Unicode渲染能力,不受这个限制,所以可以正常显示多语言字符 - 你无法通过
Sys.setlocale解决的原因也和这个逻辑有关:pillar的字符校验是基于当前系统locale的字符集范围做的,单一locale本来就无法覆盖多语言字符的判定条件。
可行解决方案
不需要修改系统locale,以下方案都可以直接实现控制台正常显示多语言字符:
- 强制开启pillar的UTF-8打印支持
在脚本开头加一行配置即可:
options(pillar.print_utf8 = TRUE)
这个配置会要求pillar直接输出原始UTF-8字符,跳过编码转义步骤,适配RStudio这类原生支持UTF-8输出的控制台环境。
2. 临时用base R逻辑打印
需要快速校验内容时,直接将tibble转为data.frame输出即可:
as.data.frame(tb)
- 升级环境彻底解决
如果是Windows系统,升级到R 4.2及以上版本,同时在RStudio的「全局选项-常规-高级」中将默认文本编码设置为UTF-8,重启后即可彻底解决该问题。
内容的提问来源于stack exchange,提问作者Xuewen
相关产品推荐
相关产品推荐

