求助:将MSSQL的image/varbinary列数据转换为有效文件
问题描述
我有来自未知MSSQL服务器的image类型(我认为是varbinary的旧版本)列数据,想要编写脚本(优先Python或TypeScript)将这类数据转换为文件。尝试了多种方法都无法成功转换目标数据,生成的文件已损坏,推测是编码/转换操作有误。
我尝试的Python代码
代码能正常运行,但输出的PDF无效:
import binascii s = open("data.dat").read() # 去掉开头的'0x' s = s[2:] # 十六进制解码为二进制 binary = binascii.unhexlify(s) with open("test123.pdf", 'wb') as f: f.write(binary)
解决方案
目标数据中包含了导出时添加的换行符、空格等格式字符,这些不属于原始十六进制数据的一部分,直接解码会导致二进制文件损坏。需要先过滤掉所有非十六进制字符,再进行转换。
修正后的Python脚本
import binascii # 读取文件并过滤非十六进制字符 with open("data.dat", "r") as f: content = f.read() # 仅保留有效的十六进制字符(0-9、a-f、A-F) clean_hex = ''.join([char for char in content if char in '0123456789abcdefABCDEF']) # 将清理后的十六进制数据转为二进制 binary_data = binascii.unhexlify(clean_hex) # 写入目标PDF文件 with open("output.pdf", "wb") as f: f.write(binary_data)
TypeScript版本脚本
import * as fs from 'fs'; // 读取原始数据文件 const rawContent = fs.readFileSync('data.dat', 'utf8'); // 移除所有非十六进制字符 const cleanHex = rawContent.replace(/[^0-9a-fA-F]/g, ''); // 转换为Buffer并写入文件 const buffer = Buffer.from(cleanHex, 'hex'); fs.writeFileSync('output.pdf', buffer);
内容的提问来源于stack exchange,提问作者tomfa
相关产品推荐
相关产品推荐

