はい、ASCII コードについて話しています。申し訳ありませんが、私はここの Delphi 開発者ではありません。
7 に答える
Delphi 7 の場合、Virtual Treeview の作成者であるMike Lischke による無料の Unicode ライブラリを入手します。
ライブラリには Unicode との間の変換関数が多数含まれているため、アプリケーションで最も意味のあるものを使用できます。
または、組み込みのエンコーディング ルーチンと独自の変換関数ライブラリを備えた Delphi 2009 にアップグレードすることもできます。
いくつかのことをまっすぐにしましょう。文字セット(文字セット)と文字エンコードは、2つの関連していますが、異なる概念です。文字セットは、ある種の整数文字コードが関連付けられた文字の抽象的なリストです。次に、文字エンコーディングがあります。これは基本的に、文字がバイトでどのように表されるかを記述するアルゴリズムです。
ASCIIは、文字セットとエンコーディングの両方として機能します。7ビットを使用して128文字(94印刷可能)を表現します。一方、Unicodeは文字セットであり、1,114,112コードポイントを表します。Unicode文字列を表すエンコーディングはいくつかありますが、最も注目すべきものはUTF-8、UTF-16、UTF-16LE、およびUTF-32です。つまり、単一のUnicode文字は、エンコーディングに応じてさまざまな方法で表すことができます。
delphi 7でUnicode文字をASCIIコードに変換するにはどうすればよいですか?
質問は2つの方法で解釈できると思います。
一部のエンコーディングで、ASCII印刷可能文字のみを含むUnicode文字列があります。文字列をASCIIエンコーディングのバイト配列に変換するにはどうすればよいですか?
一部のエンコーディングにUnicode文字列があり、漢字などの非ASCII印刷可能文字も含まれています。情報を失うことなく文字列をASCIIエンコードにエンコードし、後で元のUnicode文字列にデコードして戻すにはどうすればよいですか?
最初の意味であれば、Osmanが言っているようにUnicode文字列をWideStringにロードして実行できます
var
original: WideString;
s: AnsiString;
begin
s := AnsiString(original);
2番目を意味する場合は、Base64エンコーディングのような一般的なエンコーディングアルゴリズムが必要になります。DavidBartonのDCPcryptv2Beta3に含まれているDCPBase64.pasを使用できます。
Unicode から ASCII への変換に関する関連する質問を参照してください。
- JavaでUTF-8をUS-Asciiに変換する方法
- Unicode 文字を対応する ASCII 文字に変換する方法
- Python を使用してファイルの形式を Unicode から ASCII に変換するにはどうすればよいですか?
一般に、数十万のエントリの文字セットを 127 のエントリの文字セットに変換するには、情報やエンコード スキームが失われます。
「ASCII」は、文字から数値への特定のマッピングの名前ですが、実際には ASCII をまったく意味しない場合に「ASCII コード」と言う人もいます。その時点で有効なマッピングが何であれ、文字の数値が必要なだけです。その説明はあなたに当てはまりますか?
その場合、Ord
標準関数を使用して、使用している Unicode 文字の Unicode コードポイント値を取得できます。
var
wc: WideChar;
ws: WideString;
x: Word;
x := Ord(wc);
x := Ord(ws[1]);
ただし、本当に ASCII を意味する場合は、どのような種類の変換を念頭に置いているかをより具体的にする必要があります。
http://swissdelphicenter.ch/en/showcode.php?id=1692 の関数を使用でき
ます。指定されたコード ページを使用して、Unicode 文字列を Ansi 文字列に変換します。
デフォルトのシステム コードページ (地域オプションで非ユニコード コードページとして定義) を使用して変換する場合は、次のように簡単に実行できます。
var
ws: widestring;
s: string;
begin
s:=string(ws)
例として、文字 A は Unicode では U+0041 として、ansi ではちょうど 41 として表されます。したがって、変換は非常に簡単ですが、Unicode 文字がどのようにエンコードされているかを調べる必要があります。最も一般的なのは UTF-16 と UTF-8 です。UTF 16 は、基本的に 1 文字あたり 2 バイトですが、1 文字がそれ以上のバイトを持つ場合があるため、単純化しすぎです。UTF-8 は 1 文字あたり 1 バイトを意味するように聞こえますが、2 または 3 の場合もあります。さらに複雑なことに、UTF-16 はリトル エンディアンまたはビッグ エンディアンの場合があります。(U+0041 または U+4100)。
あなたの質問が意味をなさないのは、たとえばアラビア文字 ain U+0639 を英語ロケールの ansi に変換したい場合です。できません。
変換の定義が何であるかによって異なります。下位 127 文字を対応する Unicode 文字にマップする場合は、明示的なキャストを使用できます。ただし、文字列に上位の文字が含まれている場合、これはゴミを作成します。
ë -> e および û -> u のようなマッピングが必要な場合は、独自のコードを記述できます。ただし、変換できない文字が常にあることに注意してください。