将表示 UCHAR 数组的 json 字符串响应转换为字节数组

Posted

技术标签:

【中文标题】将表示 UCHAR 数组的 json 字符串响应转换为字节数组【英文标题】:Convert json string response representing UCHAR array to Byte array 【发布时间】:2019-08-16 16:24:34 【问题描述】:

我正在调用一个 json-rpc api,它返回一个表示 PDF 文件的 UCHAR 数组(因此返回的结果属性包含 UCHAR 数组的字符串表示)。我需要将此结果字符串转换为字节数组,以便可以将其作为 PDF 文件处理,即,将其保存和/或将其作为 POST 中的文件转发到另一个 api。

我已经尝试了以下(结果变量是返回的 UCHAR 字符串):

char[] pdfChar = result.ToCharArray();
byte[] pdfByte = new byte[pdfChar.Length];
for (int i = 0; i < pdfChar.Length; i++)

    pdfByte[i] = Convert.ToByte(pdfChar[i]);

File.WriteAllBytes(basePath + "test.pdf", pdfByte);

我也试过了:

byte[] pdfByte = Encoding.ASCII.GetBytes(pdfObj.result);
File.WriteAllBytes(basePath + "test.pdf", pdfByte);

使用这两种方法,当我尝试打开生成的 test.pdf 文件时,它不会打开,可能是因为它没有正确转换。

【问题讨论】:

【参考方案1】:

原来,虽然 API 函数的输出是 UCHAR,但当它作为 JSON 字符串的一部分进来时,它是一个 base64 字符串,所以这对我有用:

byte[] pdfBytes = Convert.FromBase64String(pdfObj.result);

我很确定 API 正在“在后台”进行转换,即,当被调用的函数返回 UCHAR 时,API 正在使用框架来创建 JSON-RPC 响应,并且它可能正在执行在发送之前进行转换。如果是 .NET 进行了从 UCHAR 到 base64 的转换,请随时插话并确认。

【讨论】:

【参考方案2】:

你知道文件编码格式吗?尝试使用这个

return System.Text.Encoding.UTF8.GetString(pdfObj.result)

编辑:

你找到的解决方案也被举报here

var base64EncodedBytes = System.Convert.FromBase64String(pdfObj.result);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes)

【讨论】:

我没有尝试这个,因为在看到这个回复之前我已经找到了解决方案。无论如何,感谢您的快速回复和绝对可行的故障排除步骤的建议!

以上是关于将表示 UCHAR 数组的 json 字符串响应转换为字节数组的主要内容,如果未能解决你的问题,请参考以下文章

gson 怎么处理 json数组字符串转list对象

怎样将JAVA中得list集合转换为javascript的二维数组?

jquery 数组转json

js中如何把一串数字转换为数组

如何将json字符串转换为数组

数组字典转json串,不支持字符串