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

Delphi 2007/2010控制台程序writeln()输出希腊字符乱码如何解决?

问题根源

  • Windows系统设置的非Unicode程序默认编码为希腊语ANSI代码页(1253),但控制台默认使用希腊语OEM代码页(737)处理输出内容,两种编码字符映射规则不一致,直接输出就会出现乱码。
  • Delphi 2007的string类型为ANSI字符串,默认按1253编码存储,直接输出到控制台时会被按737解码,字符完全错位。
  • Delphi 2010的string类型为Unicode字符串,默认调用writeln输出时会自动转换为系统ANSI编码(1253),同样会遇到编码不匹配的问题。

修复方案

方案1:代码内修改控制台输出编码(全版本通用,无需修改系统配置)

在程序初始化阶段调用Windows API将控制台输出代码页设置为1253即可,修改后完整代码如下:

program Project5;

{$APPTYPE CONSOLE}
uses
  Windows;

var errorMes : string;

begin
    // 设置控制台输出代码页为希腊语ANSI编码1253
    SetConsoleOutputCP(1253);
    // Delphi 2010及以上Unicode版本可额外添加下行,确保输入内容编码匹配
    // SetConsoleCP(1253);
    errorMes := 'αβγδεζηθικλμνξοπρστυφχψω';
    writeln(errorMes);
    readln;
end.

方案2:修改系统控制台默认编码(无需修改代码)

如果不希望调整程序代码,可通过修改注册表统一修改所有控制台程序的默认编码:

  • 按下Win+R输入regedit启动注册表编辑器
  • 定位到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
  • 找到右侧名为OEMCP的键值,将其数值修改为1253
  • 重启系统后生效,所有控制台程序默认使用1253代码页处理输入输出

注意事项

需确认Delphi项目的源码文件保存编码为系统默认ANSI编码(1253),不要手动修改为UTF-8等其他编码,否则字符串常量在编译阶段就会出现编码错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:24:03