delphi 2009从没有setCodePage的字符串中读取oem

时间:2011-05-19 08:57:48

标签: delphi unicode delphi-2009 ansi

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;

为了在show message中查看正确编码的oemst,需要声明 setcodepage(oemst,862,FALSE);

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

更新: 使用Oem是最好的,因为我没有指定这个旧的界面。 使用readln assign文件是旧代码的一部分,我宁愿使用旧方法,因为它需要更少的工作,并且测试(为什么我们总是忘记测试?)![在此输入图像描述] [1]

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

SetMultiByteConversionCodePage(862);让事情顺利进行。