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") ##連接數據庫
- 1
- 2
- 3
- 4
- 5
-
Rmysql連接Mysql爲例
Rmysql連接數據庫出現亂碼時,讀取時先在R裏對數據庫中文編碼進行設置dbSendQuery(conn,'SET NAMES gbk') ###先設置格式爲Gbk,然後再進行數據讀取
- 1
- 2
-
讀取數據後,對其數據格式編碼進行設置
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路"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
從本地讀取數據
-
用read.csv, read.table等讀取數據
1 可以通過設置參數encoding進行調整,函數默認設置是“unknown”
2 可以通過對數據的格式進行中文編碼轉換###方法一進行參數設置 data <- read.csv(file="test.csv", enconding="utf-8") ###方法二對數據轉換中文編碼 Encoding(data) <- "UTF-8" ##轉換成UTF-8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 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的數據結構顯示都是一樣的。
##但是其中文編碼不同,說明不注意編碼問題雖然可能不報錯,但是可能結果並不是自己想要的