我有1000 csv文件,其中包含希伯来语的量。
我试图将它们导入到R中,但在将希伯来语读入程序时出现了问题。
当使用这个,我得到arount 80%的文件与正确的希伯来语,但其他20%没有:
data_lst <- lapply(files_to_read,function(i){
read.csv(i, encoding = "UTF-8")
})
当使用这个,我得到了其他20%的权利,但80%的工作之前不工作在这里:
data_lst <- lapply(files_to_read,function(i){
read.csv(i, encoding = 'utf-8-sig')
})
我无法使用库(readr)中的read_csv,必须使用read.csv格式。
谢谢你的帮助!
1条答案
按热度按时间tvokkenx1#
听起来你有两种不同的文件编码,utf-8和utf-8-sig,后者在开头有一个
Byte Order Mark
为0xef, 0xbb, 0xbf
表示编码。我将
iris
数据集以两种编码方式写入csv-唯一的区别是第一行。UTF-8编码格式:
UTF-8-签名:
在您的例子中,听起来R没有正确检测编码,但是使用
encoding="utf-8"
对某些文件有效,而encoding="utf-8-sig"
对其他文件有效,在我看来,自然的操作过程是读取第一行,看看它是否在开始时具有该模式:这将返回一个(命名的)字符向量
c("utf-8", "utf-8-sig")
,然后您可以为read.csv
提供编码:这应该读取具有正确编码的每个 Dataframe ,并将它们存储在列表
data_lst
中。由于从右到左的阅读顺序,可能需要额外考虑。R是否将插入符号(
^
)用作句子开头分隔符取决于字符串中的所有字母是否都是希伯来字母。例如:这对希伯来语的普通用户来说可能是显而易见的,但对我来说是新的,可能会导致额外的复杂性。如果模式不总是在你认为应该识别的时候被识别,你可以从模式中删除脱字符:
唯一的例外情况是,您希望在其中一个列名中看到该字符串。