转换为Delphi 2009 unicode问题

时间:2010-01-23 10:21:15

标签: delphi unicode delphi-2009 delphi-7

我将lecacy app从Delphi 7转换为Delphi 2009。 我收到了这个错误: E2010不兼容的类型:'Char'和'AnsiChar' 我该如何解决?我试图声明Alphabet:Ansistring [AlphabetLength]但是失败了。

const
  AlphabetLength = 64;
  Alphabet: string[AlphabetLength] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

function TBase64.ValueToCharacter(value: Byte; var character: char): boolean;
begin
  Result := true;
  if (value > AlphabetLength-1) then
    Result := false
  else
// Compile error E2010 Incompatible types: 'Char' and 'AnsiChar'
    character := Alphabet[value+1];
end;    

function TBase64.CharacterToValue(character: char; var value: byte): boolean;
begin
  Result := true;
  value := Pos(character, Alphabet);
  if value = 0 then
    Result := false
  else
    value := value-1;
end;

2 个答案:

答案 0 :(得分:4)

避免在Unicode Delphi版本(2009及更高版本)中使用弃用的ShortString类型:

const
  AlphabetLength = 64;
  Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

上述变化应该足够了。 您还必须考虑从1字节的AnsiChars更改为2字节的Chars。

编辑(jeroen pluimers):

这是some documentation on the string types

答案 1 :(得分:0)

你可以使用

Alphabet : String = 'ABCDEFGH...'?

或者,如果您确定只使用ANSI字符(这里似乎就是这种情况),您可以直接投射:

character := Char (Alphabet [value+1]);

即使在D2009及更高版本中,似乎短字符串类型在内部使用AnsiChar