在python/R中将utf8解码为正则字符

2024-04-25 18:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有各种各样的字符串,例如xc3\x93\xc5\x81,这些字符串是编码的UTF-8字符。我唯一可以访问的文件就是那些编码的值。我如何在R或python中将其解码为常规字符(而不是UTF-8俚语)?在


Tags: 文件字符串编码解码字符中将常规utf
1条回答
网友
1楼 · 发布于 2024-04-25 18:27:04

在R中,我们可以在https://stackoverflow.com/a/24958365/6197649处使用@Jeroen的函数,只需稍作修改就可以处理\xnn,而不是{}

unescape_unicode <- function(x){
  #single string only
  stopifnot(is.character(x) && length(x) == 1)

  #find matches
  m <- gregexpr("(\\\\)+x[0-9a-z]{2}", x, ignore.case = TRUE)

  if(m[[1]][1] > -1){
    #parse matches
    p <- vapply(regmatches(x, m)[[1]], function(txt){
      gsub("\\", "\\\\", parse(text=paste0('"', txt, '"'))[[1]], fixed = TRUE, useBytes = TRUE)
    }, character(1), USE.NAMES = FALSE)

    #substitute parsed into original
    regmatches(x, m) <- list(p)
  }

  x
}
^{pr2}$

有趣的是,stringi::stri_escape_unicode给出了一个不同的结果,似乎把\xc3\x93误解为两个独立的字符(当它应该是一个,"\xc3\x93" == "\u00d3"时,但我很困惑是哪种约定决定了这一点,我希望能在评论中更清楚地了解这个主题的人的意见)

stringi::stri_unescape_unicode(x)
#> [1] "Ã\u0093Å\u0081"

reprex package(v0.2.1)于2019-04-15创建

相关问题 更多 >

    热门问题