dfirr

A Note on R How-to in Cybersecurity Investigation

Shift_JISのURLをデコードする

ログ分析の過程で、URLエンコーディングされたURLをデコードしたいことがあります。ところがurl_decode()関数はUTF-8にしか対応していないため、ファイル名などでShift_JISが登場したときに困ります。

そこで、下のような書き捨ての関数を作りつつ、stringrパッケージや関数のベクトル対応の要点を確認します。特に、str_replace()関数の置換文字列として関数が使用可能な点は、非常に使いでがあります。

RPubs「Shift_JISのURLをデコードする」

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)
}