Dataweave 中的 Base64 转换为数字返回不正确的值

问题描述 投票:0回答:1

我在 Python 中有以下代码解码

Yag=
并返回字节
b'a\xa8'
并转换为
25000

的整数
import base64

num = base64.b64decode("Yag=")
converted = int.from_bytes(num, byteorder='big')

当我使用以下 DWL 时,它返回

a\ufffd
97

%dw 2.0
output application/json
import * from dw::core::Binaries
var num = fromBase64("Yag=")
var converted = num as Number
---
{
    num: num,
    converted: converted
}

python 块是预期的结果。我是否遗漏了有关 DWL 以及它如何解码 Base64 的内容?

mule dataweave mule4
1个回答
0
投票

DataWeave 返回正确的结果。该错误来自假设数字的二进制表示在 DataWeave 和 Python 之间是相同的。一般来说,你不应该在任何两种不同的语言之间做出这样的假设。

为避免该问题,您可以使用 Binaries 模块函数

toHex()
获取二进制的十六进制表示,然后使用 Numbers 模块中的函数
fromHex()
将十六进制字符串转换为数字。

%dw 2.0
output application/json
import * from dw::core::Binaries
var num = fromBase64("Yag=")
var converted = num as Number
---
{
    num: num,
    converted: converted,
    toHex: toHex(num),
    toHexToNumber: dw::core::Numbers::fromHex(toHex(num))
}

输出:

{
  "num": "a\ufffd",
  "converted": 97,
  "toHex": "61A8",
  "toHexToNumber": 25000
}
© www.soinside.com 2019 - 2024. All rights reserved.