ファイルがTMemoryStream
で開かれています。現在のエンコーディングはBOM付きのANSIまたはUTF8にすることができます。 TMemoryStream
のエンコーディングをUTF8
に変換する必要があります。それ、どうやったら出来るの?TMemoryStreamのエンコードをutf8に変換する
答えて
TMemoryStream
を子孫TBytesStream
に変更できる場合は、Convert
という機能をTEncoding
から使用できます。それが最も効率的な方法ですが、少なくともそれは一つの方法であり、それが唯一の順番にも効率のいくつかの並べ替えである行のカップルを、必要がある場合
var
stream: TBytesStream;
bytes: TBytesStream;
...
TEncoding.GetBufferEncoding(stream.Bytes, curEncoding);
if curEncoding <> TEncoding.UTF8 then begin
bytes := TEncoding.Convert(curEncoding, TEncoding.UTF8, stream.Bytes);
stream.Free;
stream := TBytesStream.Create(bytes);
end;
わかりません。
大きなファイルではあまり効率的ではありませんので、小さなファイルで作業してください。また、 'GetBufferEncoding()'がBOMを検出しない場合は、OSのデフォルトのANSI文字セットを表す 'TEncoding.Default'を返します。これは、ファイルのANSIエンコーディングと同じでないかもしれません。 'TEncoding'は実際のANSI文字セットを実際に検出することができません。これはヒューリスティックを実行しないためです。それが重要な場合は、手動で行う必要があります。 –
こんにちはUwe。この行は機能しません:stream.Bytes:= TEncoding.Convert(curEncoding、TEncoding.UTF8、stream.Bytes); stream.Bytesは読み取り専用です。 – user3857505
確かに!私はそれをカバーするコードを変更しました。 –
- 1. UTF8エンコード/€
- 2. ScrapyのUTF8エンコード
- 3. iPhone - WindowsCP1251からUTF8へのNSStringエンコードの変換
- 4. GolangがUTF8文字列をUTF8に変換する
- 5. EBCDICをvb.netでUTF8に変換する
- 6. Python UTF8ファイルをCP1250に変換する
- 7. utf8をバイナリに変換する方法
- 8. latin1をUTF8に変換する
- 9. 文字列をUTF8に変換する
- 10. latin1をUTF8に変換するPython
- 11. PHP UTF8エンコードとデコード
- 12. RMysqlエンコードutf8の問題
- 13. Perl - テンプレートツールキットutf8エンコードOSオプション
- 14. utf8 db内のansi blobデータをutf8文字セットに変換する
- 15. Delphi 2010:UTF8でエンコードされたPAnsiCharをUnicodeStringに変換するにはどうすればよいですか?
- 16. PHP jsonでエンコードされたUTF8文字列を通常の文字に変換する
- 17. osx:newbie様々なエンコーディングの5k txtファイルをutf8でエンコードされたtxtファイルに変換する
- 18. luaのバイトをutf8にエンコードするには?
- 19. 構造変更なしでMySQLをUTF8に変換する
- 20. 文字セットUTF8に同じエンコードが、ANSI
- 21. PostgreSQL + PHP + UTF8 =エンコードに無効なバイトシーケンス
- 22. MySQL全体のデータベースをutf8に変換するには
- 23. csファイルのエンコードを変換する
- 24. 既存のデータベースの中でlatin1データをutf8に変換する
- 25. ANSIファイルのテキストをnode.jsのUTF8に変換するFyle System
- 26. テーブルのlatin1をutf8に変換する際の問題
- 27. golangのpythonのエンコード( 'utf8')と同等
- 28. 番号をローカル(UTF8)に変換するJasperReports&MySQLのベンガル語
- 29. JavascriptからVTFをUTF8の文字列に変換する
- 30. asp.net文字エンコードの問題utf8
明らかにしましょう。効率性を気にする人は、変換する前にそれをメモリに読み込むのはなぜですか?古典的な間違いは、 'TMemoryStream'が重要な' TStream'の唯一の実装だと考えることです。効率が重要なのであれば、確実に 'TFileStream'を使って読み込み、変換してから' TMemoryStream'に書き込みたいと思っています。中間の男を切り取ってください。あなたがディスクから読んでいるなら、ディスクアクセスが支配的であり、残りのプロセスを無関係にすることをお勧めします。最後に、パフォーマンスに関するアドバイスを行うには、使用方法の詳細な知識が必要です。私たちはそれを持っていません。 –
TEncoding.UTF8を見てください。 –
DavidとRudyに感謝します。私のファイルはすでにmemorystreamで開かれています。私はそれを変更することはできません。私はそれをエンコーディングに変換する必要があります。 utf8に変換した後、いくつかの変更を加えて元のエンコーディングでディスクに再度保存する必要があります。これは、拡張文字がファイルを破壊するのを止めるために行われています。 – user3857505