-1

请帮我,

我知道这听起来可能是一个非常简单的问题,但我就是不知道如何让它发挥作用。我刚开始学习 Unicode,所以请给我一些提示或示例代码。

我正在将旧的编码和解码代码从 Delphi 5 转换为 Delphi XE2。当我调用“Char”函数时,它会产生一个不同的字符,似乎它发生在任何编码集的扩展字符上。

在德尔福 5:

Char(129) -> 将导致空字符

在德尔福 XE2 :

Char(129) -> 将产生 #$81

我尝试在 delphi XE2 上使用 AnsiChar,结果是:

AnsiChar(129) -> 结果为#129

我应该在 delphi XE2 上使用什么代码,所以它也会返回一个空字符。不是#nn 符号?出于向后兼容性的原因,我需要它返回与 Delphi 5 相同的结果。

这与HIGHCHARUNICODE指令有关吗?我也读过并尝试过,但仍然没有运气。

这是我在 Delphi XE2 上尝试的代码,我做了一个简单的代码,但它确实与我的编码/解码代码具有相同的逻辑。代码将获取字符然后将其放入编辑框中。

procedure TForm1.Button1Click;
var
  chars : Array[0..2] of AnsiChar;
  ansi_string : AnsiString;
begin
  chars[0] := AnsiChar(65);
  chars[1] := AnsiChar(129);  
  chars[2] := AnsiChar(66);

  ansi_string := chars;
  // Here the ansi_string have a value of 'A'#$81'B'

  EditBox1.Text := ansi_string;
  // Here when i look the EditBox1.text in Evaluate/modify form, 
  // it shows 'A'#$0081'B'
  // but at the form, it only show AB
end;

我怎样才能使 ansi_string 变量的值为 'AB' 而不是 'A'#$81'B'?

提前致谢,

4

1 回答 1

0

在 Delphi 5 中CharAnsiChar,但在 XE2Char中是WideChar。127 是 anAnsiChar可以容纳的最高有符号值,因此 129 的值,即 hex $81, binary 10000001,将简单地解释为 -127 ,它也是 hex $81, binary 10000001。它们只是对相同位值的不同解释。

根据我实际执行的编码/解码代码,您将需要使用AnsiChar/AnsiString显式而不是Char/String泛型,或者切换到使用Byte值,或者重新编写代码以正确支持 Unicode,而不是对大小做出假设Char了。很难说,因为您没有显示您的实际代码。但是您应该只使用AnsiChar/AnsiString就可以了,因为它们的运行方式与往常相同(调试器可能只是以AnsiChar不同的方式显示值,仅此而已)。

于 2013-08-27T17:09:32.340 回答