在我们的应用中,我们收到的文本文件(.txt,.csv从不同的来源,等等).在阅读时,这些文件有时会包含垃圾,因为文件是在不同的/未知的代码页中创建的.
有没有办法(自动)检测文本文件的代码页?
的detectEncodingFromByteOrderMarks,对StreamReader构造,工程UTF8 和其他的Unicode标文件,但是我正在寻找一种方法来检测代码页,像ibm850,windows1252.
谢谢你的回答,这就是我所做的.
我们收到的文件来自最终用户,他们没有关于代码页的线索.接收者也是最终用户,到目前为止,这是他们对代码页的了解:代码页存在,并且令人讨厌.
解:
我在下面的问题中尝试了这种方法,但仍然卡住了.
以下代码应该是可重现的...任何想法?我宁愿不使用scan()或readLines,因为我过去一直在成功使用此代码来处理各种状态级别的ACS数据....
我的另一个想法是在导入之前编辑文本文件.但是,我将文件存储为zipped并使用脚本解压缩然后访问数据.必须在R环境之外编辑文件才会真正搞砸了这个过程.提前致谢!
Filename <- "g20095us.txt"
Url <- "http://www2.census.gov/acs2005_2009_5yr/summaryfile/2005-2009_ACSSF_By_State_By_Sequence_Table_Subset/UnitedStates/All_Geographies_Not_Tracts_Block_Groups/"
Widths <- c(6,2,3,2,7,1,1,1,2,2,3,5,5,6,1,5,4,5,1,3,5,5,5,3,5,1,1,5,3,5,5,5,2,3,
3,6,3,5,5,5,5,5,1,1,6,5,5,40,200,6,1,50)
Classes <- c(rep('character',4),'integer',rep('character',47))
Names <- c('fileid','stusab','sumlev','geocomp','logrecno','us','region','division',
'statece','state','county','cousub','place','tract','blkgrp','concit',
rep('blank',14),'ua',rep('blank',11),'ur',rep('blank',4),'geoid','name',rep('blank',3))
GeoHeader <- read.fwf(paste0(Url,Filename),widths=Widths,
colClasses=Classes,col.names=Names,fill=TRUE,strip.white=TRUE)
Run Code Online (Sandbox Code Playgroud)
下面的文件"g2009us.txt"中的四行.第二个"Canoncito"造成了问题.下载中的其他文件是csv,但是这个文件是固定宽度的,并且是识别感兴趣的地理位置所必需的(数据的组织不是非常直观).
ACSSF US251000000964 2430 090 25100US2430090 Cameron Chapter,Navajo Nation Reservation and Off-Reservation Trust Land,AZ - NM - UT ACSSF US251000000965 2430 09225100US2430092CañoncitoChapter,Navajo Nation Reservation and Off-Reservation Trust Land,AZ - NM - UT ACSSF US251000000966 2430 095 25100US2430095 Casamero Lake Chapter,纳瓦霍国家保留和非预订信托土地,亚利桑那州 - 新墨西哥州 - 美国证券交易所代码US251000000967 2430 105 25100US2430105 Chi Chil Tah章,纳瓦霍国家预订和非预订信托基地,亚利桑那州 - 新墨西哥州 - UT