0

こんにちは皆さん、私は自分の DB からテキストをフェッチしています。テキストを db に挿入する前に、テキストのエンコーディングが ISO-8859-1 であることを知っていますが、db からフェッチした後、このテキストをロードする前に、このコードでエンコーディングをチェックしています

InputStreamReader is = new InputStreamReader(new ByteArrayInputStream(body.getBytes()));
is.getEncoding();   
Log.v("encoding", ""+is.getEncoding());

// String body =  fetched from db 

テキストのエンコーディングがUTF-8であることをログに記録しています。そして、このテキストは、この方法で webview にロードされていません:

mailView.loadDataWithBaseURL(null, body, "text/html", "UTF-8", null);

この問題を解決する正しい方法を教えてください。

4

1 に答える 1

0

この返信はひどく遅れていますが、Google 経由で質問に出くわしたので、答えると思いました。

JavaDoc で説明されているようにnew InputStreamReader(InputStream)、システムのデフォルト (明らかに UTF-8) でリーダーを作成します。is.getEncoding()保存されたデータと一致する場合と一致しない場合があるデフォルトを返すだけです。

一般に、ストリームのエンコーディングを明示的に指定することをお勧めします。つまり、コンテンツとともにエンコーディングを保存する必要があるということです。帯域外の知識を使用できます (たとえば、私のアプリケーションは ISO-8859-1 のみを使用しています) が、選択したエンコーディングを将来変更した場合に脆弱になります。

世界は常に良い場所であるとは限らず、文字列は文字セットから分離されるため、文字セット検出器を調べることができます。例としてhttp://userguide.icu-project.org/conversion/detectionを参照してください。

于 2015-02-13T03:19:30.930 に答える