PAYATHON 2026

VSCode/Cursor 如何区分 Delphi 文件的 UTF-8 与 Windows-1257 编码?

数据小陈

结论

可以限制 VS Code 自动猜测编码时使用的候选项。对于混用 UTF-8 和 Windows-1257 的 .pas 文件,可以将候选编码设为 utf8 和 windows1257,以排除 Windows-1255。不过,编码检测依据的是文件字节。如果同一组字节在多种编码下都能有效解码,编辑器就无法仅凭文件内容确定正确编码。

VS Code 从 1.91 版本起提供 files.candidateGuessEncodings,用于指定自动检测的候选编码。启用 files.autoGuessEncoding 后,只有旧编码候选项中恰好一个能无损解码时,编辑器才会选择它。如果无法确定,检测结果会回退到 files.encoding。详见 VS Code 1.91 更新说明 和 VS Code 文件设置定义。

配置候选编码

可以先在工作区的 .vscode/settings.json 中试用以下设置:

{
  "files.autoGuessEncoding": true,
  "files.candidateGuessEncodings": [
    "utf8",
    "windows1257"
  ],
  "files.encoding": "utf8",
  "files.eol": "\r\n"
}

候选列表中没有 windows1255。如果检测无法确定编码,files.encoding 会作为默认值;它不能判断某个文件实际使用了哪种编码。

如果 Cursor 没有识别 files.candidateGuessEncodings,请先确认其内置的 VS Code 版本包含这项设置,然后重启窗口并重新打开文件。VS Code 从 1.91 版本开始支持该设置,Cursor 是否支持取决于它内置的版本。

检测仍可能出错的情况

Windows-1255 和 Windows-1257 都是单字节编码。同一组字节有时能用两种编码解码,只是显示的字符不同。因此,即使候选项限定为 UTF-8 和 Windows-1257,也无法仅凭字节内容确认原编码是 Windows-1257。files.candidateGuessEncodings 可以缩小误选范围,但无法消除编码本身的歧义。

用户提到,Windows 的非 Unicode 程序区域设置可能影响 Notepad++ 的判断。VS Code 提供的这些设置没有说明会根据该区域设置判定文件编码,因此不应把它当作可靠的配置依据。

手动打开并保存

如果文件显示异常,可以在状态栏的编码菜单中选择 Reopen with Encoding,再选择 Windows 1257。确认内容显示正确后,如果需要更改文件的实际编码,再选择 Save with Encoding。重新打开文件和保存文件是两个不同的操作。编码菜单的用法见编辑基础文档。

如果检测无法区分文件编码,可靠的做法是依据项目约定、外部元数据或人工确认来指定编码。确认解码结果之前不要保存,以免把显示错误的字符写回文件。

备注:内容仅供参考。