有时读入外部数据集时,会遇到中文字符是乱码的情况。这种情况往往是字符串没有指定对字符编码的缘故。
查看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个。是一二四字节变长编码。