Powerbi 如何解码该组件?(例如:“2F%3F%26%3D-”gt;/?“=”)

Powerbi 如何解码该组件?(例如:“2F%3F%26%3D-”gt;/?“=”),powerbi,powerquery,m,Powerbi,Powerquery,M,如何转换这个 qqqq%2Fwwww%3Feeee%26rrrr%3Dtttt 对此 qqqq/wwww?eeee&rrrr=tttt ? 有没有简单的解码方法?我们有一个URI编码库函数,URI.EscapeDataString,但是我们没有一个反向代码来解码(这可能是一个疏忽)。请随时在网站上建议此功能 如果有任何非ASCII字符,编写自己的文本要比“%”上的文本替换稍微复杂一些 下面是一个M实现,它构建字节,然后将其转换为UTF-8二进制文本: let InputDa

如何转换这个

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

qqqq/wwww?eeee&rrrr=tttt
?

有没有简单的解码方法?

我们有一个URI编码库函数,
URI.EscapeDataString
,但是我们没有一个反向代码来解码(这可能是一个疏忽)。请随时在网站上建议此功能


如果有任何非ASCII字符,编写自己的文本要比“%”上的文本替换稍微复杂一些

下面是一个M实现,它构建字节,然后将其转换为UTF-8二进制文本:

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编码库函数,
URI.EscapeDataString
,但我们没有要解码的逆函数(这可能是一个疏忽)。请随时在网站上建议此功能


如果有任何非ASCII字符,编写自己的文本要比“%”上的文本替换稍微复杂一些

下面是一个M实现,它构建字节,然后将其转换为UTF-8二进制文本:

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

@MikeHoney代码的小扩展。 我想在1GO中解码完整的URI:

// Uri.Decode()
// Ref: https://docs.microsoft.com/en-us/powerquery-m/uri-parts
// Encoded+Decoded "?" & "&" to non-URI chars so Uri.Parts() could convert entire URI in 1 go.
    Uri.Decode = (url as text) as text => 
        let t1 = Text.Replace (url, "?", Character.FromNumber (29) ), // ? -> <group separator> 
            t2 = Text.Replace (t1, "&", Character.FromNumber (30) ), // & -> <record separator>
            t3 = Uri.Parts("http://foo?a=" & t2)[Query][a],
            t4 = Text.Replace(t3, Character.FromNumber (29), "?" ),
            decoded = Text.Replace(t4, Character.FromNumber (30), "&" )
        in decoded,
//Uri.Decode()
//参考:https://docs.microsoft.com/en-us/powerquery-m/uri-parts
//编码+解码“?”&“&”为非URI字符,因此URI.Parts()可以一次性转换整个URI。
Uri.Decode=(url作为文本)作为文本=>
设t1=Text.Replace(url,“?”,Character.FromNumber(29)),//?->
t2=文本。替换(t1,“&”,Character.FromNumber(30)),//&->
t3=Uri.Parts(“http://foo?a=“&t2)[查询][a],
t4=文本。替换(t3,Character.FromNumber(29),“?”,
解码=文本。替换(t4,Character.FromNumber(30),“&”)
在解码中,

对@MikeHoney代码的小扩展。 我想在1GO中解码完整的URI:

// Uri.Decode()
// Ref: https://docs.microsoft.com/en-us/powerquery-m/uri-parts
// Encoded+Decoded "?" & "&" to non-URI chars so Uri.Parts() could convert entire URI in 1 go.
    Uri.Decode = (url as text) as text => 
        let t1 = Text.Replace (url, "?", Character.FromNumber (29) ), // ? -> <group separator> 
            t2 = Text.Replace (t1, "&", Character.FromNumber (30) ), // & -> <record separator>
            t3 = Uri.Parts("http://foo?a=" & t2)[Query][a],
            t4 = Text.Replace(t3, Character.FromNumber (29), "?" ),
            decoded = Text.Replace(t4, Character.FromNumber (30), "&" )
        in decoded,
//Uri.Decode()
//参考:https://docs.microsoft.com/en-us/powerquery-m/uri-parts
//编码+解码“?”&“&”为非URI字符,因此URI.Parts()可以一次性转换整个URI。
Uri.Decode=(url作为文本)作为文本=>
设t1=Text.Replace(url,“?”,Character.FromNumber(29)),//?->
t2=文本。替换(t1,“&”,Character.FromNumber(30)),//&->
t3=Uri.Parts(“http://foo?a=“&t2)[查询][a],
t4=文本。替换(t3,Character.FromNumber(29),“?”,
解码=文本。替换(t4,Character.FromNumber(30),“&”)
在解码中,

souri.Parts有一个URL解码功能——谁知道呢?谢谢Carl给我的另一颗M宝石,可惜没有记录。。。你能把这些信息添加到吗?也许还有一个更完整的例子?感谢@MikeHoney的建议,我们已经将这些信息添加到MSDN文档中,并将在即将发布的产品版本中发布。如果您有其他的文档想法,请继续:)所以Uri.Parts有一个URL解码功能-谁知道呢?谢谢Carl给我的另一颗M宝石,可惜没有记录。。。你能把这些信息添加到吗?也许还有一个更完整的例子?感谢@MikeHoney的建议,我们已经将这些信息添加到MSDN文档中,并将在即将发布的产品版本中发布。如果您有其他文档方面的想法,请随时提供:)