You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 13:37:09