如何确定与read.fwf一起使用的正确文件编码(或使用解决方案删除不一致的字符)

如何确定与read.fwf一起使用的正确文件编码(或使用解决方案删除不一致的字符),r,character-encoding,R,Character Encoding,我在下面的问题中尝试了这种方法,但仍然卡住了 以下代码应该是可复制的。。。有什么想法吗?我不想使用scan()或readLines,因为我过去已经成功地将此代码用于各种状态级别的ACS数据 我的另一个想法是在导入文本文件之前对其进行编辑。但是,我存储压缩的文件,并使用脚本解压,然后访问数据。必须在R环境之外编辑该文件,这将真正破坏该过程。提前谢谢 Filename <- "g20095us.txt" Url <- "http://www2.census.gov/acs2005_20

我在下面的问题中尝试了这种方法,但仍然卡住了

以下代码应该是可复制的。。。有什么想法吗?我不想使用scan()或readLines,因为我过去已经成功地将此代码用于各种状态级别的ACS数据

我的另一个想法是在导入文本文件之前对其进行编辑。但是,我存储压缩的文件,并使用脚本解压,然后访问数据。必须在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)

Filename首先,我们从识别所有非ASCII字符开始。我通过转换来实现这一点
转换为原始向量,然后查找大于127的值(最后一个
明确编码的ASCII值)

最后,我们使用正确的编码重新加载。令人困惑的是,编码 任何
read.*
函数的参数都不会执行此操作-您需要 手动指定连接上的编码:

fixed <- readLines(file("g20095us.txt", encoding = "latin1"))
fixed[bad]

已修复,因此这是一个大文件!但我从华盛顿拿了一个看。。。它们看起来像逗号分隔的文件,而不是固定宽度的文件。他们还可以使用
read.csv
很好地读入。如果我错了,请在你的问题中发布
g20095us.txt
文件的前几行,这样我们可以避免大量下载谢谢Justin。我忘了可以直接访问文件,而不是下载整个数据集。代码已被更新,直接指向所讨论的文件(这是我之前链接到的压缩集中唯一的固定宽度文件)。我发现使用
emacs
之类的文本编辑器或
sed
之类的命令行工具将固定宽度文件清理为更易于管理的格式(例如tsv或csv)最简单。不过,请查看有关确定文件编码的更多详细信息。我在文章的开头贴了同样的链接。在仔细研究了作者的建议后,我没有再进一步了解。不过,我可能没有正确地实现它。
iconv(lines[bad], "latin1", "utf-8")
fixed <- readLines(file("g20095us.txt", encoding = "latin1"))
fixed[bad]