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 合作是必须的,因为我没有指定这个旧接口(interface)。 使用 readln 分配文件是旧代码的一部分,我宁愿使用旧方法的解决方案,因为它需要更少的工作和测试。
最佳答案
在 D2009 及更高版本中,您通常最好不要使用旧的 Pascal 文件方法,如 allocatefile、read(ln) 和 write(ln),因为它们不支持 Unicode。每个人都会建议您改用流。在这种情况下,您实际上可能最好使用旧方法因为它不理解 Unicode。
当您正确设置代码页时,我认为您需要做的是使用 SetConsoleCP
设置控制台代码页。这是在 Windows 单元中声明的 Windows API 调用。
关于Delphi 2009从字符串中读取oem而无需setCodePage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6056121/