如何在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
相关产品推荐
相关产品推荐

