在R中将字符串转换为十六进制
Convert string to HEX in R
我到处寻找答案,但找不到合适的答案。我需要将字符串转换为 R 中的特定编码,但无法这样做:
string <- "überhaupt"
我需要的是:“überhaupt”
到目前为止我使用的以下功能:
textutils::HTMLencode(string) gives: "überhaupt"
utf8::utf8_print(string, utf8 = F) gives: "\u00fcberhaupt"
iconv(string, from = "windows-1252", "utf-8") gives: "überhaupt"
看来我需要十六进制数字字符参考https://en.wikipedia.org/wiki/%C3%9C但我不知道如何转换
感谢您的帮助
看来您需要该页面的“数字字符参考”编码。我不确定是否有内置函数,但这是编写此类函数的一次尝试
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] "überhaupt"
基本思路是查找所有 non-ascii 个字符,然后用它们的十六进制值对它们进行编码。
我现在找到了完美的答案。所以它应该适用于所有系统:
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 的帮助!
我到处寻找答案,但找不到合适的答案。我需要将字符串转换为 R 中的特定编码,但无法这样做:
string <- "überhaupt"
我需要的是:“überhaupt”
到目前为止我使用的以下功能:
textutils::HTMLencode(string) gives: "überhaupt"
utf8::utf8_print(string, utf8 = F) gives: "\u00fcberhaupt"
iconv(string, from = "windows-1252", "utf-8") gives: "überhaupt"
看来我需要十六进制数字字符参考https://en.wikipedia.org/wiki/%C3%9C但我不知道如何转换
感谢您的帮助
看来您需要该页面的“数字字符参考”编码。我不确定是否有内置函数,但这是编写此类函数的一次尝试
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] "überhaupt"
基本思路是查找所有 non-ascii 个字符,然后用它们的十六进制值对它们进行编码。
我现在找到了完美的答案。所以它应该适用于所有系统:
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 的帮助!