-1

私を助けてください、

これは非常に単純な質問のように聞こえるかもしれませんが、それを機能させる方法がわかりません。Unicodeを勉強し始めたばかりなので、ヒントやサンプルコードを教えてください。

古いエンコーディングおよびデコーディング コードを Delphi 5 から Delphi XE2 に変換していました。そして、「Char」関数を呼び出すと、別の文字になり、エンコーディングセットの拡張文字で発生するようです。

Delphi 5 で:

Char(129) -> 空の文字になります

Delphi XE2 で:

Char(129) -> 結果 #$81

Delphi XE2でAnsiCharを使用しようとしましたが、結果は次のとおりです。

AnsiChar(129) -> #129 となります

Delphi XE2 でどのコードを使用すればよいので、空の char も返されます。#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;

'A'#$81'B' ではなく 'AB' の値を持つ ansi_string 変数を作成するにはどうすればよいですか?

前もって感謝します、

4

1 に答える 1

0

Delphi 5 ではCharですAnsiCharが、XE2CharではWideChar代わりに です。127 は が保持できる最大の符号付き値であるAnsiCharため、値 129 (16 進数$81、2 進数10000001) は単純に -127 (これも 16 進数$81、2進数) として解釈され10000001ます。それらは同じビット値の異なる解釈です。

私が実際に行っているエンコーディング/デコーディング コードに応じて、一般的に / の代わりに / を明示的に使用するか、値AnsiCharを使用するように切り替えるか、コードを書き直して Unicode を適切にサポートし、サイズについて想定しないようにする必要があります。もう。実際のコードを表示していないため、言うのは難しいです。ただし、 /を使用するだけで問題ないはずです。これは、常に同じように動作するためです (デバッガーは単に値を異なる方法で表示している可能性があります)。AnsiStringCharStringByteCharAnsiCharAnsiStringAnsiChar

于 2013-08-27T17:09:32.340 に答える