R字符串编码来自"未知" /" ASCII"到" UTF-8"

时间:2018-06-13 18:16:55

标签: r elasticsearch utf-8 character-encoding stringi

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

"无效的UTF-8起始字节0xa0 \ n在[来源: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似乎都无助于转换。

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

1 个答案:

答案 0 :(得分:0)

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

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

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