2
procedure p;
var 
  f:TextFile;
  oemst:OemString;///declared as   OemString = Type AnsiString(CP_OEMCP);
begin
  AssignFile(f,fileName);
  reset(f);
  read(f,oemSt);
  ShowMessage(oemst);
end;

为了在显示消息中看到正确编码的 oemst,需要声明: setcodepage(oemst,862,false);

如何从 oem 文件中读取,并确保编译器在 oem 编码中正确显示它?

更新:使用 Oem 是必须的,因为我没有指定这个旧界面。使用 readln 分配文件是旧代码的一部分,我宁愿有一个使用旧方法的解决方案,因为它需要更少的工作和测试。

4

2 回答 2

2

在 D2009 及更高版本中,您通常最好不要使用旧的 Pascal 文件方法,例如 assignfile、read(ln) 和 write(ln),因为它们不支持 Unicode。每个人都会建议您改用流。在这种情况下,您实际上可能会更好地使用旧方法,因为它不理解 Unicode。

当您正确设置代码页时,我认为您需要做的是使用SetConsoleCP. 这是在 Windows 单元中声明的 Windows API 调用。

于 2011-05-19T09:10:54.453 回答
2

SetMultiByteConversionCodePage(862); 搬东西了。

于 2011-05-19T12:11:17.647 回答