*.srt
ハード ドライブ上のファイルを検索するプログラムを Delphi 7 で作成しました。このプログラムは、これらのファイルのパスと名前をメモにリストします。これらのファイルを ANSI から UTF-8 に変換する必要がありますが、成功していません。
6 に答える
Utf8Encode 関数は、WideString 文字列をパラメーターとして取り、Utf-8 文字列を返します。
サンプル:
procedure ConvertANSIFileToUTF8File(AInputFileName, AOutputFileName: TFileName);
var
Strings: TStrings;
begin
Strings := TStringList.Create;
try
Strings.LoadFromFile(AInputFileName);
Strings.Text := UTF8Encode(Strings.Text);
Strings.SaveToFile(AOutputFileName);
finally
Strings.Free;
end;
end;
Delphi 7 で動作するように見えるGpTextStreamを見てください。Delphiの古いバージョンで Unicode ファイルを読み書きする機能があり (ただし、Delphi 2009 では動作します)、変換に役立つはずです。
var
Latin1Encoding: TEncoding;
begin
Latin1Encoding := TEncoding.GetEncoding(28591);
try
MyTStringList.SaveToFile('some file.txt', Latin1Encoding);
finally
Latin1Encoding.Free;
end;
end;
コーディングを開始する前に、回答全体をお読みください。
質問に対する適切な答え-そしてそれは簡単なものではありません- 基本的にツリーステップで構成されています:
- コンピュータで使用されている ANSI コード ページを特定する必要があります。Windows API の GetACP() 関数を使用して、この目標を達成できます。(重要:コードページはユーザーが変更できるため、ファイル名の取得後、できるだけ早く取得する必要があります。)
- MultiByteToWideChar() Windows API 関数を正しい CodePage パラメータ (前の手順で取得) で呼び出して、ANSI 文字列を Unicode に変換する必要があります。このステップの後、ファイル名リストを含む UTF-16 文字列 (実際には WideString) が得られます。
- UTF8Encode() または WideCharToMultiByte() Windows API を使用して、Unicode 文字列を UTF-8 に変換する必要があります。この関数は、必要な UTF-8 文字列を返します。
ただし、このソリューションは、入力 ANSI 文字列を含む UTF-8 文字列を返します。ANSI 関数がファイル名を返したときにファイル名が既に破損している可能性があるため、これはおそらく問題を解決する最良の方法ではありません。したがって、適切なファイル名は保証されません。 .
問題の適切な解決策は、より複雑な方法です。
ファイル名リストが完全にクリーンであることを確認したい場合は、ANSI にまったく変換されないようにする必要があります。ファイル処理 API の「W」バージョンを明示的に使用することで、これを行うことができます。この場合、もちろん、TFileStream やその他の ANSI ファイル処理オブジェクトは使用できませんが、Windows API が直接呼び出します。
それほど難しいことではありませんが、TFileStream などで構築された複雑なフレームワークが既にある場合は、@ss. この場合の最善の解決策は、適切な API を使用する TStream の子孫を作成することです。
私の答えが、あなたや同じ問題に対処しなければならない人に役立つことを願っています. (私はそれほど前にそうしなければなりませんでした。)
アスキーのことですか?
ASCII は UTF-8 と下位互換性があります。 http://en.wikipedia.org/wiki/UTF-8