0

これを変換する方法

qqqq%2Fwwww%3Feeee%26rrrr%3Dtttt

これに

qqqq/wwww?eeee&rrrr=tttt

?

簡単にデコードする方法はありますか?

4

2 に答える 2

5

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],
于 2016-03-28T07:06:09.427 に答える