R语言data.frame的Encoding(中文乱码解决方式)

有时读入外部数据集时,会遇到中文字符是乱码的情况。这种情况往往是字符串没有指定对字符编码的缘故。

查看data.frame的列的字符编码方式

使用Encoding函数查看:

df %>% 
    select_if(is.character) %>%  # 选择是character的列
    map(Encoding) %>%            # 显示该列的encoding
    as.data.frame                # list整理成表

更进一步,采用stringi package的stri_enc_mark函数获取encoding方式

library(stringi)
df %>% 
    select_if(is.character) %>%
    map(stri_enc_mark) %>%
    as.data.frame

修改dataframe列的Encoding方式

比如,把df的是字符类型的列的编码方式指定为GB2312,以便消除乱码。

df2 = df %>% mutate_if(is.character, ~`Encoding<-`(., "GB2312"))

请注意,Encoding是指定字符串的编码方式,不改变内容。
stringi::stri_enc_toutf8会进行转码,改变字符串的原始字节内容。

df3 = df2 %>% mutate_if(is.character, stri_enc_toutf8)  # 修改成utf-8编码方式

汉字编码

  • GB2312
    GB 2312 或 GB 2312-80 是中国国家标准简体中文字符集。共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个。GB 2312 对任意一个图形字符都采用两个字节表示,并对所收汉字进行了“分区”处理,每区含有 94 个汉字/符号,分别对应第一字节和第二字节。这种表示方式也称为区位码
  • GBK
    GBK 即汉字内码扩展规范,共收入 21886 个汉字和图形符号。GBK 向下与 GB 2312 完全兼容,向上支持 ISO 10646 国际标准。GBK 采用双字节表示。
  • GB18030
    国家标准 GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集。GB 18030 与 GB 2312-1980 和 GBK 兼容,共收录汉字70244个。是一二四字节变长编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值