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

R String Encoding from "unknown"/"ASCII" to "UTF-8"

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

"Invalid UTF-8 start byte 0xa0\n at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@40d00701; line: 1, column: 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 编码进行编码。这解决了我由于编码不一致而无法将数据加载到弹性搜索中的问题。