从数据文件中删除非ASCII字符

我有一堆csv文件,我正在阅读到R,包括以.rdata格式的包/数据文件夹。 不幸的是,数据中的非ASCII字符检查失败。 tools包有两个function来检查非ASCII字符( showNonASCIIshowNonASCIIfile ),但我似乎无法find一个删除/清理它们。

在研究其他UNIX工具之前,最好在R中完成这个工作,这样我就可以保持从原始数据到最终产品的完整工作stream程。 是否有任何现有的软件包/函数来帮助我摆脱非ASCII字符?

要简单地删除非ASCII字符,可以使用base R的iconv() ,设置sub = "" 。 像这样的东西应该工作:

 x <- c("Ekstr\xf8m", "J\xf6reskog", "bi\xdfchen Z\xfcrcher") # eg from ?iconv Encoding(x) <- "latin1" # (just to make sure) x # [1] "Ekstrøm" "Jöreskog" "bißchen Zürcher" iconv(x, "latin1", "ASCII", sub="") # [1] "Ekstrm" "Jreskog" "bichen Zrcher" 

查找非ASCII字符,或者查找文件中是否有任何文件,可以采用以下方法:

 ## Do *any* lines contain non-ASCII characters? any(grepl("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII"))) [1] TRUE ## Find which lines (eg read in by readLines()) contain non-ASCII characters grep("I_WAS_NOT_ASCII", iconv(x, "latin1", "ASCII", sub="I_WAS_NOT_ASCII")) [1] 1 2 3 

现在,稍微好一点的方法就是使用stringi包来提供一般的unicode转换function。 这样可以尽可能地保留原文:

 x <- c("Ekstr\u00f8m", "J\u00f6reskog", "bi\u00dfchen Z\u00fcrcher") x #> [1] "Ekstrøm" "Jöreskog" "bißchen Zürcher" stringi::stri_trans_general(x, "latin-ascii") #> [1] "Ekstrom" "Joreskog" "bisschen Zurcher"