从"unknown"/"ASCII"到"UTF-8"的R字符串编码



我真的不确定如何将其变成一个可重现的示例,为此我深表歉意。但是我有一个带有字符串列的数据框。当我在列上运行stri_enc_mark时,我看到我同时具有"ASCII"和"UTF-8"编码的字符串。这是一个问题,因为当我尝试将此数据上传到弹性搜索数据库时,我遇到了以下错误:

"无效的 UTF-8 起始字节 0xa0 在 [来源: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@40d00701;行: 1, 列: 1425]">

我假设这是因为 ASCII 编码的字符串。我尝试使用write.csv(... fileEncoding = 'UTF-8')但是当我加载该 CSV 时,字符串列仍然混合了编码。Encoding(x) <- 'UTF-8'stri_enc_toutf8stri_encode似乎都没有帮助转换。

任何建议或指导都会很棒。

多亏了@MrFlick我才能解决问题。本质上,给定一个包含混合编码字符列的数据框,最简单的解决方法是:

df %>%
mutate_if(is.character, function(x){
x %>%
sapply(function(y){
y %>%
charToRaw %>%
rawToChar
})
})

这可确保所有字符都以相同的native编码进行编码。这解决了由于编码不一致而无法将数据加载到弹性搜索中的问题。

最新更新