我在 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 的内容?
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
}