これを変換する方法
qqqq%2Fwwww%3Feeee%26rrrr%3Dtttt
これに
qqqq/wwww?eeee&rrrr=tttt
?
簡単にデコードする方法はありますか?
これを変換する方法
qqqq%2Fwwww%3Feeee%26rrrr%3Dtttt
これに
qqqq/wwww?eeee&rrrr=tttt
?
簡単にデコードする方法はありますか?
URIエンコーディングライブラリ関数はUri.EscapeDataString
ありますが、デコードする逆関数はありません (これは見落としだった可能性があります)。https://ideas.powerbi.comでこの機能を提案してください。
ASCII 以外の文字がある場合、自分で書くのは "%" をテキストで置き換えるよりも少し複雑です。
バイトを構築し、UTF-8 バイナリとしてテキストに変換する M 実装を次に示します。
let
InputData = Csv.Document("a=b
=ab
ab=
abc☃def"),
Uri.UnescapeDataString = (data as text) as text => let
ToList = Text.ToList(data),
Accumulate = List.Accumulate(ToList, [ Bytes = {} ], (state, current) =>
let
HexString = state[HexString]?,
NextHexString = HexString & current,
NextState = if HexString <> null
then if Text.Length(NextHexString) = 2
then [ Bytes = state[Bytes] & Binary.ToList(Binary.FromText(NextHexString, BinaryEncoding.Hex)) ]
else [ HexString = NextHexString, Bytes = state[Bytes] ]
else if current = "%"
then [ HexString = "", Bytes = state[Bytes] ]
else [ Bytes = state[Bytes] & { Character.ToNumber(current) } ]
in
NextState),
FromBinary = Text.FromBinary(Binary.FromList(Accumulate[Bytes]))
in
FromBinary,
AddEscaped = Table.AddColumn(InputData, "Escaped", each Uri.EscapeDataString([Column1])),
AddUnescaped = Table.AddColumn(AddEscaped, "Custom", each Uri.UnescapeDataString([Escaped]))
in
AddUnescaped
(私は上記のことを誇りに思っていますが、すべてのデータが適切にエンコードされていることがわかっている場合は、もっと簡単な方法を考えました。)
Uri.Parts
文字列を URL に連結し、次のようなURL デコード機能を利用できます。
Uri.UnescapeDataString = (data as text) as text =>
Uri.Parts("http://whatever?a=" & data)[Query][a],