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

Delphi 7保存UTF-16LE到文件时的代码报错与字符显示异常问题

Delphi 7 特殊字符显示异常与运行报错解决

一、IDE中Unicode字符显示为?的解决

Delphi 7默认编辑器采用ANSI编码,无法直接显示超出系统ANSI字符集范围的Unicode字符(如ᗿ)。解决方式二选一:

  • 方案1:使用Unicode转义序列赋值
    避免直接输入特殊字符,改用字符的Unicode码点转义:
    W := WideChar($15FF) + 'ABC'; // $15FF是字符ᗿ的Unicode码点
    
    这种方式能让IDE正确识别代码,不会显示问号。
  • 方案2:将代码文件保存为UTF-8编码
    把代码文件另存为UTF-8(带BOM),重新打开时选择UTF-8编码加载,编辑器就能正确显示Unicode字符。但Delphi 7对UTF-8代码文件兼容性有限,优先推荐方案1。

二、运行时访问违规报错的解决

报错信息中文翻译

项目 Project1.exe 触发异常类 $C0000005,异常描述为「访问违规」,触发地址 0040327F。

修复代码

原代码中直接操作PWideChar(W)^存在内存访问风险,修改为更安全的写法,确保写入长度计算正确:

uses
  Classes;
    
const
  BOM: WideChar = $FEFF;
var
  W: WideString;
  FS: TFileStream;
  WriteSize: Integer;
begin
  W := WideChar($15FF) + 'ABC';
  FS := TFileStream.Create('text.txt', fmCreate);
  try
    // 写入UTF-16LE BOM
    FS.WriteBuffer(BOM, SizeOf(BOM));
    // 计算需要写入的字节数
    WriteSize := Length(W) * SizeOf(WideChar);
    if WriteSize > 0 then
      FS.WriteBuffer(PWideChar(W)^, WriteSize);
  finally
    FS.Free;
  end;
end;

内容的提问来源于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 01:07:51