在R中将字符串转换为十六进制

在R中将字符串转换为十六进制,r,utf-8,R,Utf 8,我到处寻找答案,但找不到正确的答案。我需要将字符串转换为R中的特定编码,但无法执行此操作: string <- "überhaupt" 似乎我需要十六进制数字字符引用,但我不知道如何转换 感谢您的帮助因此,您似乎希望从该页面获得“数字字符参考”编码。我不确定是否有一个内置函数,但这是编写这样一个函数的一次尝试 char_ref_encode <- function(x) { cp <- charToRaw(x) parts <- rle(cp

我到处寻找答案,但找不到正确的答案。我需要将字符串转换为R中的特定编码,但无法执行此操作:

string <- "überhaupt"
似乎我需要十六进制数字字符引用,但我不知道如何转换


感谢您的帮助

因此,您似乎希望从该页面获得“数字字符参考”编码。我不确定是否有一个内置函数,但这是编写这样一个函数的一次尝试

char_ref_encode <- function(x) {
  cp <- charToRaw(x)
  parts <- rle(cp>127)
  with(parts, {
    starts <- head(cumsum(c(0, lengths)), -1) + 1
    ends <- cumsum(lengths)
    paste0(mapply(function(v, start, end) {
      if (v) {
        paste(sprintf("&#x%02x;", as.numeric(cp[start:end])), collapse="")
      } else {
        intToUtf8(cp[start:end])
      }
    }, values, starts, ends), collapse="")
  })
}

char_ref_encode("überhaupt")
# [1] "&#xfc;berhaupt"

char\u ref\u encode我现在找到了完美的答案。因此,它应该适用于所有系统:

function(x){
x%>%
str_extract_all(., "[:print:]")%>%
map(.x = ., ~stringi::stri_escape_unicode(.x))%>%
map(.x = ., ~str_replace_all(.x, "\\\\u0*", "&#x" ))%>%
map(.x = ., ~case_when(
str_detect(.x, "&#x") ~ str_c(.x, ";"),
T ~.x))%>%
map(.x =., ~str_c(.x, collapse = ""))%>%
unlist()
}

谢谢@MrFlick的帮助

非常感谢你。它近乎完美,但似乎失败了,当一个单词中有两个以上的特殊字符时:char_ref_encode(“größten”)给出:gr;十个,但我需要:größ;ten@WaschiWaschoi如果这是您期望的输出,那么我已经更新了functionperfect!非常感谢。我将尝试理解函数的作用:)如果我使用utf8::as_utf8(“größten”),结果会有所不同。需要更改哪些内容才能获得准确的结果größ;十个?回溯:我不是舒尔,其他用户将使用哪种操作系统,因此我认为as_utf8是一种后备解决方案。好吧,您给出的输出仅适用于拉丁1编码(windows默认)。如果这是您需要的输出,那么您需要确保将数据编码为拉丁文1而不是utf8(这与大多数人的做法相反)。
function(x){
x%>%
str_extract_all(., "[:print:]")%>%
map(.x = ., ~stringi::stri_escape_unicode(.x))%>%
map(.x = ., ~str_replace_all(.x, "\\\\u0*", "&#x" ))%>%
map(.x = ., ~case_when(
str_detect(.x, "&#x") ~ str_c(.x, ";"),
T ~.x))%>%
map(.x =., ~str_c(.x, collapse = ""))%>%
unlist()
}