0

私のアプリケーションは、UTF-8 文字エンコーディングの保存をサポートするように設定されています。UTF-8、latin-1、ASCII などのさまざまな組織から取得したファイルを読んでいます。さまざまな文字エンコーディングを持つファイルが UTF-8 に読み込まれるようにするために、何か特別なことをする必要がありますか?正しくフォーマットしますか?たとえば、ファイルの文字エンコーディングを調べて、明示的に UTF-8 に変換する必要がありますか?

それとも以下で十分ですか?

Reader reader = new InputStreamReader(new FileInputStream("c:/file.txt"), "UTF-8");

4

2 に答える 2

6

あなたはそれが間違っています。エンコーディングに読み込むのでなく、エンコーディングから読み込みます。の 2 番目の引数として指定するエンコーディングは、ソース stream(file)InputStreamReaderの予期されるエンコーディングでなければなりません。

Reader reader = new InputStreamReader(new FileInputStream("c:/file.txt"), "<encoding_of_file.txt>");

データがメモリに格納されると、常に UTF-16 になります。データを書きたい場合 (常に UTF-8 として書きたいと仮定した場合)、次を使用します。

Writer writer = new OutputStreamWriter(new FileOutputStream("destfile"), "UTF-8");
于 2013-01-25T02:39:16.080 に答える
2

ファイルのエンコーディングをリーダーに伝える必要があります。

入力が多くの異なるエンコーディングである可能性がある場合、問題が発生する可能性があります: エンコーディングを確実に検出することはできません。テキスト ファイルのエンコーディング/コードページを検出する方法を参照してください。

異なるエンコーディングをサポートしたい場合、基本的に 3 つのオプションがあります。

  • エンコーディングに関する情報<?xml version="1.0" encoding="UTF-8" ?>を XML ファイルなどのどこかに保存します。残念ながら、すべてのファイル形式 (「プレーン テキスト」ファイルなど) にそのようなメタ データがあるわけではありません。
  • さまざまなヒューリスティックを使用してエンコーディングを「検出」/推測します。これは時々うまくいかないかもしれません。
  • ユーザーに尋ねます。これはひどいユーザー エクスペリエンスです。ほとんどのユーザーは、エンコーディングが何なのかまったくわからないからです。
于 2013-01-25T11:19:52.930 に答える