PowerQuery 转换 Unicode 字符为中文显示的问题
在我们有些系统导出的数据或是网页输出的时候由于编码及设置相关问题,偶尔看到的字符是unicode形式,那么PQ中怎么将这些unicode转为我们看得懂的中文字符呢?
比如:Text.FromBinary(Json.FromValue("中")) 返回"\u4e2d"
如果在PQ里面要显示为中文有两种形式:
1."#(u字符后面的十六进制字符) "
="#(4e2d)"
或者放入记录中看下unicode的自动转换
2.Character.FromNumber(0xu字符后面的十六进制字符)
=Character.FromNumber(0x4e2d)
以上是直接将编码显式写入的方式,如果我们间接引用呢(绝大多数只能间接引用)?
= [a=Text.FromBinary(Json.FromValue("中")),
b="""#(#)("&Text.Middle(a,3,4)&")"""][b]
上面虽然返回了"#(4e2d)"但是无法转换成中文(没有了公式的等号计算过程),需要用Expression.Evaluate处理
=[a=Text.FromBinary(Json.FromValue("中")),
b=Expression.Evaluate("""#(#)("&Text.Middle(a,3,4)&")""")][b]
也就是:Expression.Evaluate("""#(4e2d)""") 注意双引号问题
同样的第二种形式:
= [a=Text.FromBinary(Json.FromValue("中")),
b=Character.FromNumber("0x"&Text.Middle(a,3,4))][b]
将会报错,无法将"0x4e2d"转为数字,也需要Expression.Evaluate
= [a=Text.FromBinary(Json.FromValue("中")),
b=Character.FromNumber(Expression.Evaluate("0x"&Text.Middle(a,3,4)))][b]
通过这里也能发现另一个小技巧:16进制转10进制(往往拿到的不是0x4e2d而是文本字符串"0x4e2d")
=Expression.Evaluate("0x4e2d")
有个情形将M中的table转为json形式:
=Text.FromBinary(Json.FromValue(#table({"姓名","成绩1","成绩2"},{{"张三",10,28},{"李四",25,100}})))
那么问题来了,怎么将这个文本字符串中的unicode转为中文形式显示呢?
如果我的表有几千上万行呢?
Expression.Evaluate(Text.FromBinary(Web.Contents("https://raw.githubusercontent.com/tt0203/changxin/master/json.format")),#shared)
({1,[畅心="吹水",成绩=100],true,{1..9,"上善若水"},#table(1,{{"吹牛逼"}})})
道高一尺 魔高一丈
https://pbihub.cn/users/44
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)