Delphi 使用D2009和x2B将OEM转换为ansi;

Delphi 使用D2009和x2B将OEM转换为ansi;,delphi,Delphi,对于Unicode版本专家: 是否可以定义反映当前OEM编码的ansistring类型 (假设不带代码页标识符的ansisting反映ansi代码页) 这是一个半开玩笑半严肃的问题: 这将使我的CRT单元端口大大简化为Unicode(使其美观且易于键入)似乎您应该能够使用CP\u OEMCP,就像您可以使用CP\u ACP获得Ansi代码页一样 type OemString = type AnsiString(CP_OEMCP); 如果这不起作用,那么将变量声明为RawByteString

对于Unicode版本专家:

是否可以定义反映当前OEM编码的ansistring类型

(假设不带代码页标识符的ansisting反映ansi代码页)

这是一个半开玩笑半严肃的问题:


这将使我的CRT单元端口大大简化为Unicode(使其美观且易于键入)

似乎您应该能够使用
CP\u OEMCP
,就像您可以使用
CP\u ACP
获得Ansi代码页一样

type
  OemString = type AnsiString(CP_OEMCP);

如果这不起作用,那么将变量声明为
RawByteString
。用它需要的数据填充它,一旦你发现当前的OEM代码页是什么(带有),用它将代码页分配给字符串(在这一点上,它将不再是一个
RawByteString
,尽管它声明了类型)。

我想声明某些过程,以便只接受OEM。并在必要时自动转换。第一种解决方案适用于此,并且已被接受,第二种解决方案意义不大(因为对于手动转换步骤,我不妨简单地调用oemtoansi并返回)(注意,我只检查了逻辑,没有实际测试它,或者多种类型的Ansistring是可重载的。类型x=类型y并不总是适用于此)额外的
类型
关键字是否必要?如果你可以在AnsiString和Utf8String上重载,那么你也应该能够在OemString上重载。它似乎对简单类型的重载没有帮助。我甚至想不出一段在Borland Pascals中重要的代码。但这可能是一个单独的问题,在声明新的基于
ansisting(N)
的类型时,您必须使用
type