R語言函式中的字元編碼解析

2021-09-01 06:27:05 字數 3341 閱讀 2617

rstudio有時出現讀取亂碼,在電腦本地開啟又是正常的。這是因為rstudio的編碼顯示問題,可以通過軟體設定來解決。但有時可能會因為rstudio的版本不同,編碼設定的路徑也會有所不同

常見中文格式編碼主要有兩種:gbk(gb2312)和utf-8

讀取資料read.csv()或者read.table(),windows如果不指定檔案格式編碼預設讀取的檔案格式是gbk,也有少數gb18030或utf-8。rstudio可以設定預設的中文編碼格式,但實際效果是設定前後是一樣的(default text encoding)網頁編碼絕大多數是utf-8,mysql資料庫編碼大多數是utf8

linux環境下系統指定中文編碼格式是utf_8,故read.csv()或read.table()都要求文字型別為utf_8。windows環境下用read.csv()讀取時,utf_8格式亂碼,如果用encoding指定檔案的中文編碼時則不會亂

read.csv("路徑\檔名",encoding="utf_8")

#fileencoding:在宣告檔案上使用的編碼(即重新編碼字元資料)

encoding:不用於重新編碼輸入,只是標記字串為已知編碼,允許r以本機編碼處理編碼字串

注:讀取檔案時,也讀取了字元編碼集

當讀取csv檔案資料量過大時,提示"reached getoption("max.pr-

int")--omitted 50071 rows"。是因為r控制台顯示行數要求已經不能滿足csv檔案資料量,如果想全部顯示,新增命令如下:

options(max.print=《數值)
讀取gbk資料時

read.table("路徑檔名",sep=",")
讀取utf_8格式時

read.table("路徑檔名",sep=",",fileencoding="utf_8")

read.table("路徑檔名",sep=",",encoding="utf_8")

read.table()比較read.csv()更加嚴格,要求行都有相同的長度,讀取遇到空值時,不會自動填充na

write.csv(text,"路徑檔名",fileencoding="gbk")

write.csv(text,"路徑檔名",fileencoding="utf_8")

read.csv()/read.table()盡量讀入檔案gbk格式(win下)或者utf-8格式(linux下)不是的話,用fileencoding指定編碼格式,不要用encoding

錯誤一般是make.name(col.names,unique=ture)多位元組字串有錯。在該種情況下,如果將header行刪除後讀取就是正常讀入的,但如果保留header會報錯

此時的問題一般是編碼+tab分隔符,因為檔案是假的csv格式檔案。此時可以將原來假csv檔案重新另存為csv格式檔案。或者採取另一種方法:使用分隔引數sep=「\t」,另外在編碼處採用fileencoding=「uls-2le」

當已經把資料庫編碼設定為utf-8或者其他中文編碼格式時,r語言中文讀取出現亂碼,有幾個解決方法

odbc-mysql的中文格式配置如下,設定為utf-8(在配置odbc的時候,要選擇ansi,不要選擇unicode)

#設定dbmsending為utf-8

myconn
#r語言環境

iconvlist() #用於輸出不同環境支援的編碼型別

sessioninfo() #預設使用系統字符集(cp936即gb2312編碼)

locale:

[1] lc_collate=chinese (simplified)_china.936

[2] lc_ctype=chinese (simplified)_china.936

[3] lc_monetary=chinese (simplified)_china.936

[4] lc_numeric=c

[5] lc_time=chinese (simplified)_china.936

#在r中設定 locale

sys.setlocale("lc_all","chinese")

#字元編碼轉換,字元編碼即編碼字符集和實際儲存數值之間的轉換關係.字符集規定了某個文字對應的二進位制數字存放方式(編碼)和某串二進位制數值代表了哪個文字(解碼)的轉換關係.r語言提供的一些字元編碼函式

#encoding函式用於讀取和設定字元向量編碼.r字串可使用包括"latin1" ,"utf-8"或"bytes"編碼格式.由於ascii字串對各種編碼表示的形式相同,故encoding獲取的編碼方式為unknown

xencoding(x) #字元編碼為unknown

encoding(x)

enc2native(x) #將字元向量的元素轉換為本機編碼(考慮任何標記的編碼)

enc2utf8(x) #將字元向量的元素轉換為utf-8(考慮任何標記的編碼)

#iconv函式,字元編碼轉換(轉換過程並不會做太多的校驗)因此放源編碼不合法時,常常不能正確轉換,基本語法:

iconv(x, from ="", to = "", sub = na, mark = true, toraw = false)

from源編碼,to目標編碼.sub用於替換不能轉換的位元組(預設為na)如果本身為位元組型別,則使用16進製制位元組形式替換.mark邏輯值,指明返回的字元向量是否申明編碼型別,預設為true.toraw邏輯值,指明返回字元向量還是位元組向量

x#設定字元編碼為latin1

encoding(x)

#轉換latin1字元編碼為utf-8

iconv(x, "latin1","utf-8")

#轉換為位元組型輸出

iconv(x, "latin1","utf-8", toraw = t)

chartoraw(iconv(x,"latin1", "utf-8"))

#從當前語言環境選擇合適的編碼名稱

localetocharset(locale =sys.getlocale("lc_ctype"))

R語言paste函式解析

一 paste函式 paste sep collapse null paste0 collapse null paste converts its arguments via as.character to character strings,and concatenates them separa...

R語言字元處理函式

字元處理函式用於處理文字型資料。函式描述 nchar x 計算x中字元數量 substr x,start,stop 提取或替換乙個字元向量中的子串 grep pattern,x,ignore.case true,fixed 在x中搜尋某種模式。fixed false,pattern為正規表示式。fi...

R語言 字元函式及其他實用函式

一,字元處理函式 函式 描述 nchar x 計算x中的字元數量 substr x,start,stop 提取或替換乙個字元向量中的子串 x abcdef substr x,2,4 返回值為 bcd substr x,2,4 22222 x將變成 a22222ef 函式grep grep patte...