Shift_JISのURLをデコードする
ログ分析の過程で、URLエンコーディングされたURLをデコードしたいことがあります。ところがurl_decode()関数はUTF-8にしか対応していないため、ファイル名などでShift_JISが登場したときに困ります。
そこで、下のような書き捨ての関数を作りつつ、stringrパッケージや関数のベクトル対応の要点を確認します。特に、str_replace()関数の置換文字列として関数が使用可能な点は、非常に使いでがあります。
url_decode_sjis <- function(urls){ url_decode_unit <- function(url){ url |> str_extract_all("(%.{2}|.)") |> flatten_chr() |> str_remove_all(fixed("%")) |> str_replace_all("^(.)$", function(x) as.hexmode(utf8ToInt(x))) |> as.hexmode() |> as.raw() |> rawToChar() |> stringi::stri_encode(from = "cp932", to = "utf8") } map_chr(urls, url_decode_unit) }