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

  • Post author:
  • Post category:其他


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



查看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个。是一二四字节变长编码。



版权声明:本文为ofoliao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。