我正在调用json-rpc api,该api返回代表PDF文件的UCHAR数组(因此返回的result属性包含UCHAR数组的字符串表示形式)。我需要将此结果字符串转换为Byte数组,以便可以将其处理为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文件时,它不会打开,可能是因为未正确转换。
答案 0 :(得分:0)
您知道文件编码格式吗?尝试使用此
return System.Text.Encoding.UTF8.GetString(pdfObj.result)
编辑:
您找到的解决方案也会报告here
var base64EncodedBytes = System.Convert.FromBase64String(pdfObj.result);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes)
答案 1 :(得分:0)
结果表明,尽管API函数的输出是UCHAR,但当它作为JSON字符串的一部分出现时,它是base64字符串,因此这对我有用:
byte[] pdfBytes = Convert.FromBase64String(pdfObj.result);
我很确定API会在“幕后”进行转换,即被调用的函数返回UCHAR时,api使用的是框架来创建JSON-RPC响应,并且很可能会执行转换后再发送出去。如果是.NET进行了从UCHAR到base64的转换,请随意输入并确认。