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

如何在Delphi 7中保存UTF-16(小端)编码内容与字符串到文件

实现方案

需求拆解

文件内容需按以下三部分顺序组合,最终以二进制方式写入文件:

  • UTF-16LE字节序标记(BOM):FF FE,用于让记事本识别文件编码为UTF-16LE
  • 固定UTF-16LE内容的十六进制:FF 15 41 00 42 00 43 00,对应显示文本ᗿABC
  • 编辑框输入内容的UTF-16LE编码(以示例Good为例,编码为47 00 6F 00 6F 00 64 00)

代码实现示例

Python 实现

# 编辑框输入内容
edit_text = "Good"

# 固定的UTF-16LE字节内容(已包含BOM)
fixed_bytes = bytes.fromhex("FFFEFF15410042004300")
# 将编辑框内容转为UTF-16LE编码(无需重复添加BOM)
edit_bytes = edit_text.encode("utf-16le")

# 合并字节并写入文件
with open("output.txt", "wb") as f:
    f.write(fixed_bytes + edit_bytes)

C# 实现

using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string editText = "Good";
        // 固定十六进制内容转字节数组(包含BOM)
        byte[] fixedBytes = HexToBytes("FFFEFF15410042004300");
        // 将编辑框内容转为UTF-16LE编码(Encoding.Unicode等价于UTF-16LE)
        byte[] editBytes = Encoding.Unicode.GetBytes(editText);

        // 合并所有字节
        byte[] fullContent = new byte[fixedBytes.Length + editBytes.Length];
        fixedBytes.CopyTo(fullContent, 0);
        editBytes.CopyTo(fullContent, fixedBytes.Length);

        // 写入文件
        File.WriteAllBytes("output.txt", fullContent);
    }

    // 十六进制字符串转字节数组的辅助方法
    static byte[] HexToBytes(string hexStr)
    {
        byte[] bytes = new byte[hexStr.Length / 2];
        for (int i = 0; i < hexStr.Length; i += 2)
        {
            bytes[i / 2] = Convert.ToByte(hexStr.Substring(i, 2), 16);
        }
        return bytes;
    }
}

验证结果

  • 记事本打开文件:显示ᗿABCGood
  • 十六进制编辑器打开文件:显示十六进制值FFFEFF1541004200430047006F006F006400

内容的提问来源于stack exchange,提问作者Adam Luper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:52:54