2016-03-27 3 views

Antwort

2

Wir haben eine URI Codierung Bibliotheksfunktion, Uri.EscapeDataString, aber wir haben keine Umkehrung zu dekodieren (was ein Versehen gewesen sein könnte). Fühlen Sie sich frei um diese Funktion bei https://ideas.powerbi.com


Schreiben Sie Ihre eigenen vorschlagen ein wenig komplizierter ist als Text ersetzen über „%“, wenn es keine Nicht-ASCII-Zeichen ist.

Hier ist eine M-Implementierung, die die Bytes aufbaut wandelt dann als UTF-8 binär in Text:

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 

(Ich bin ein bisschen stolz auf die oben, aber ich dachte an einem einfacheren übrigens, wenn Sie wissen, dass alle Daten richtig codiert)

Sie können die Zeichenfolge in einen URL verketten und die URL-Dekodierung Funktion von Uri.Parts wie nutzen.

Uri.UnescapeDataString = (data as text) as text => 
    Uri.Parts("http://whatever?a=" & data)[Query][a], 
+1

So Uri.Parts hat eine URL-Dekodierung - wer wusste? Danke Carl für ein weiteres M-Juwel, leider undokumentiert ... Kannst du diese Information zu https://msdn.microsoft.com/en-us/library/mt260886.aspx hinzufügen, vielleicht auch mit einem vollständigeren Beispiel? –

+1

Vielen Dank für den Vorschlag @MikeHoney, wir haben dies der MSDN-Dokumentation hinzugefügt und es wird mit der bevorstehenden Produkt-Release kommen. Wenn Sie andere Dokumentationsideen haben, lassen Sie sie kommen :) –

Verwandte Themen