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

如何从SQL Server正确提取Win-1252编码文件内容并还原?

问题分析与解决方案

核心问题

你的.NET Core代码执行了多余且错误的编码转换,导致原始文件内容被破坏。

遗留代码的实际流程

  1. 读取文件的Win-1252字节数组
  2. 通过Win-1252编码将字节数组解码为.NET字符串(内部以UTF-16格式存储)
  3. 将该字符串存入SQL Server的text列(SQL Server会以UTF-16格式保存这个字符串)

你的错误转换逻辑

你错误地将从数据库取出的UTF-16字符串先编码为Win-1252字节,再解码为UTF8字符串,最后又编码为UTF8字节写入文件——这相当于对原始内容做了两次错误的编码转换,完全偏离了原始字节流。

正确代码实现

直接将从数据库获取的字符串用Win-1252编码回字节数组,然后写入文件即可:

var content = _dBContext.Docs.Where(e => e.Id == id).Select(e => e.Contents).SingleOrDefault();
if (content == null) return; // 处理空内容场景
byte[] originalWin1252Bytes = Encoding.GetEncoding(1252).GetBytes(content);
File.WriteAllBytes(filename, originalWin1252Bytes);

原理说明

  • 从数据库取出的content是遗留应用用Win-1252解码得到的.NET字符串,内部存储为UTF-16格式
  • 用Win-1252编码该字符串,就能还原出遗留应用读取文件时的原始Win-1252字节数组
  • 将这个字节数组直接写入文件,即可得到与原始文件完全一致的内容

验证建议

可以对比原始文件和生成文件的字节哈希值(如MD5或SHA256),确认两者完全一致,以此验证结果正确性。

内容的提问来源于stack exchange,提问作者T M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:05:18