Windows的R语言经常会遇到各种各样的中文乱码问题,从数据库读取数据时,直接读取csv数据时,进行文本分析莫名奇怪得不到想要的结果时。

读取数据时的中文乱码

从数据库中读取

当你已经把数据库的编码设置为Utf-8或者其他中文编码格式时,R语言中文读取出现乱码,有几个解决的方法。一是现对数据库和R进行设置在读取,以RODBC,RMysql读取数据库为例。 二 读取后对编码 编码进行设置 ,以实例说明。

  • RODBC连接Mysql为例
    先配置ODBC-Mysql的中文格式,配置如下,再在读取时进行设置参数设置读取格式,这里设置为UTF8
###设置参数DBMSencoding为utf8

myconn <- odbcConnect(dsn=dsn, uid=uid, pwd=pwd, DBMSencoding="UTF8") ##连接数据库
  • Rmysql连接Mysql为例
    Rmysql连接数据库出现乱码时,读取时先在R里对数据库中文编码进行设置
dbSendQuery(conn,'SET NAMES gbk')   ###先设置格式为Gbk,然后再进行数据读取
  • 读取数据后,对其数据格式编码进行设置
myconn <- odbcConnect(dsn=dsn, uid=uid, pwd=pwd)
sql <- "select * from `transport-b`.xianlu_chepai limit 5"
data<- sqlQuery(myconn, sql)  ##从数据库读取格式
data  ##查看数据
"101璺<af>" "101璺<af>" "101璺<af>" "101璺<af>" "101璺<af>"
Encoding(data) <- "UTF-8" ##转换格式为UTF-8
data  ##查看数据
"101路" "101路" "101路" "101路" "101路"

从本地读取数据

  • 用read.csv, read.table等读取数据
    1 可以通过设置参数encoding进行调整,函数默认设置是“unknown”
    2 可以通过对数据的格式进行中文编码转换
###方法一进行参数设置

data <- read.csv(file="test.csv", enconding="utf-8")

###方法二对数据转换中文编码

Encoding(data) <-  "UTF-8" ##转换成UTF-8

R语言字符串处理需注意问题

R语言字符串处理时,一般会难以注意的一个问题。问题来自中文的编码,在R里既可以正常显示,数据格式又一样。以下面为例:

###设置生成a,b,c,并将a,c用enc2utf8变成utf-8格式
##查看a,b,c
 a;b;c
[1] "企业"
[1] "企业"
[1] "中国最大的一家企业" "企业家应该注意的几件事" "哈哈哈"     
##查看a,b是否存在于c中
agrep(a, c, useBytes=T)
[1] 1 2
agrep(b, c, useBytes=T)
integer(0)
##其中可以看到a,b的都是字符串"企业",但是其结果是不一样的
str(a);str(b) ##查看结构
 chr "企业"
 chr "企业"
##这是可以考虑一下,是不是其编码存在问题
Encoding(a);Encoding(b);Encoding(c)
[1] "UTF-8"
[1] "unknown"
[1] "UTF-8" "UTF-8" "UTF-8"
##从结果中可以看到a,b的数据结构显示都是一样的。
##但是其中文编码不同,说明不注意编码问题虽然可能不报错,但是可能结果并不是自己想要的