0

UTF-8 テキスト ファイルをバイト単位で読み取り、ファイル内の各バイトの ASCII 値表現を取得したいと考えています。これはできますか?もしそうなら、最良の方法は何ですか?

私の目標は、見つけた2バイトの組み合わせを1バイトに置き換えることです(これらは私が準備した設定条件です)

たとえば、197 の後に 158 (10 進表現) が続く場合は、1 バイトの 17 に置き換えます。

標準の Delphi IO 操作を使用したくない

AssignFile
ReSet
ReWrite(OutFile);
ReadLn
WriteLn
CloseFile

より良い方法はありますか?TStream(Reader & Writer)を使用してこれを行うことはできますか?

これが私が使用しているテストの例です。列 84 で始まる文字 (350) (2 バイト) があることは知っています。16 進エディタで表示すると、文字は 197 + 158 で構成されているため、デルファイ コードを使用して 198 を見つけようとしていますが、それを見つけるために

FS1:= TFileStream.Create(ParamStr1, fmOpenRead);
try
 FS1.Seek(0, soBeginning);
 FS1.Position:= FS1.Position + 84;
 FS1.Read(B, SizeOf(B));
 if ord(B) = 197 then showMessage('True') else ShowMessage('False');
finally
 FS1.Free;
end;
4

3 に答える 3

4

TFileStream を使用して、ファイルからたとえばバイト配列にすべてのデータを読み取り、後で utf8 シーケンスをチェックできます。また、utf8 シーケンスには 2 バイト以上を含めることができることに注意してください。

また、Delphi には、utf8 データを使用可能な Unicode 文字列に変換する関数 Utf8ToUnicode があります。

于 2012-12-13T17:01:28.023 に答える
3

私の理解では、テキスト ファイルを UTF-8 から ASCII に変換したいということです。それは非常に簡単です:

StringList.LoadFromFile(UTF8FileName, TEncoding.UTF8);
StringList.SaveToFile(ASCIIFileName, TEncoding.ASCII);

ランタイム ライブラリには、さまざまなテキスト エンコーディング間で変換するためのあらゆる種類の機能が付属しています。この機能を自分で複製しようとは思わないでしょうか?

この変換によってデータが失われる可能性があることを認識していただければ幸いです。序数が 127 を超える文字は、ASCII で表現できません。実際、UTF-8 で 1 オクテット以上を必要とするすべてのコード ポイントは、ASCII では表現できません。

于 2012-12-13T17:17:04.813 に答える
0

あなたは 5 時間後に別のトピックで同じ質問をしました。回答はあなたの特定の質問により適切に対応しています。

delphi 2010を使用してUTF-8ファイルのUnicode文字を置き換える

于 2012-12-14T01:04:29.643 に答える