0

  1. このサイトで説明されているように、システムのコードページをロシア語に変更しました
  2. PCが再起動されます
  3. 次に、特別なロシア文字を含む名前のファイルをdirに作成しました
  4. 次に、このディレクトリ内のすべてのファイルを一覧表示し、次を使用して一般的なDelphi7コードでファイルを表示しようとしました。

 SearchRec: TSearchRec;

  FindFirst

  showmessage(SearchRec.Name);

  FindNext(SearchRec);
  FindClose(SearchRec);

コードはうまく機能します。

ロシア語ではなくベトナム語で4つの手順をすべてやり直すと、showmessageで表示されるファイル名が正しくありません。代わりに表示されるものも?あります(スクリーンショットを参照):

ここに画像の説明を入力してください

助けてください

4

1 に答える 1

1

これは、2009年より前のDelphiバージョンがそのstringタイプを実装する方法によるものです。フォントの問題ではなく、文字エンコードの問題です。

すべてのstring変数、およびすべてのWindows API呼び出しは、ANSIエンコーディングを使用して実行されます。ANSIでは、一度に1つのコードページしか使用できません。コードページを混在させる(つまり、ロシア語とベトナム語のエンコーディングを混在させる)には、テキストを処理してUNICODEWindowsAPIを呼び出す必要があります。

あなたのケースで起こったことは次のとおりです。

  • UNICODEエンコーディングを使用して、Windowsでロシア語の文字を含むファイルを作成します。
  • ベトナムの現在のコードページを使用してファイルを読み取る場合、最初の127文字(つまり、ASCII 7文字、たとえば数字、主な句読点、英字)のみがUNICODEからANSIベトナムに読み取ることができます。変換中、すべての正しくない文字として変換されますか?ANSIベトナム語の文字列で。

したがって、いくつかの回避策があります。

  • Delphi> = 2009にアップグレードすると、stringUNICODEになるので、文字セットを混在させることができます。
  • テキストを保存するために使用し、Windows全体のAPIを直接呼び出します。つまり、VCLユニットを使用したり、で定義されたり、で定義されwidestringたりすることはできません。FindFirst/FindNextSysUtilsShowMessageDialogs

もちろん、最初のものが最も簡単です!

于 2012-06-29T18:20:03.237 に答える