Re: [問題] 讀入"鴴" "鸊鷉" 等怪字

作者: celestialgod (天)   2015-07-04 10:07:45
※ 引述《helixc (@_2;)》之銘言:
: [軟體熟悉度]:
: 新手+入門
: [問題敘述]:
: 如標題,因為再分析鳥類的資料,所以會遇到鴴、鸊、鷉這種某些系統無法顯示的字
: 和程式語言不太熟,好像是BIG5的編碼比較少,所以遇到這些怪字會崩潰,
: 轉到UTF8就會恢復正常?
: 問題是目前手邊的名錄都是放在Excel當中,
: 這些怪字在Excel當中活得很好,但一輸出成CSV等純文字文件就會變成亂碼。
: 我再去Notepad++等軟體轉換編碼也沒有用。
: [程式範例]:
: 鳥類名錄資料在下面:
: https://dl.dropboxusercontent.com/u/18689552/birdnames.xls
: 另外我在NotePad++自己打了一個用UTF-8編碼的檔案如下:
: https://dl.dropboxusercontent.com/u/18689552/birdnametest.txt
: 裡面只有兩行字:
: 173,反嘴鴴,長腳鷸科
: 174,水雉,水雉科
txt部分:
read.table, read.csv加上encoding = "UTF-8"只能讀到第二行
但下面這個有成功:
readLines("birdnametest.txt", encoding = "UTF-8") %>%
strsplit(",") %>% do.call(rbind, .)
# [,1] [,2] [,3]
# [1,] "173" "反嘴鴴" "長腳鷸科"
# [2,] "174" "水雉" "水雉科"
http://imgur.com/1Gsldsu
另外 fread不能調encoding,完全讀不進去,iconv也失敗(攤手
xls部分:
好讀上色版:http://pastebin.com/2L5UrhSq
library(rJava)
library(xlsx)
library(data.table)
library(magrittr)
fileName = "birdnames.xls"
original_data = read.xlsx2(fileName, 1,
header=TRUE, encoding = "UTF-8", as.data.frame=FALSE) %>%
do.call(cbind, .) %>% data.table()
# data.table在這裡是非必要,為了後面的setnames而用的
data_names = read.xlsx2(fileName, 1,
header=FALSE, startRow=1, endRow=1, encoding = "UTF-8",
as.data.frame=FALSE) %>% unlist() # 這行是因為header通常讀不進去要手動
original_data %<>% setnames(data_names)
# setnames是data.table的function,提供不複製直接重新命名data.table的方法
# 如果前面不用data.table,這裡可以改成用magrittr的set_names
# 或是直接用names() <-
original_data$c_name
http://imgur.com/XyK5d0f
http://imgur.com/c97dRSQ
# readxl套件: (不用JAVA,讀取也比較快,也不會轉換字串為factor)
library(readxl)
dat = read_excel("birdnames.xls")
dat$c_name
補上session information:
> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=Chinese (Traditional)_Taiwan.950
[2] LC_CTYPE=Chinese (Traditional)_Taiwan.950
[3] LC_MONETARY=Chinese (Traditional)_Taiwan.950
[4] LC_NUMERIC=C
[5] LC_TIME=Chinese (Traditional)_Taiwan.950
作者: helixc (@_2;)   2015-07-04 14:02:00
好神奇,我試試看,感謝!

Links booklink

Contact Us: admin [ a t ] ucptt.com