2

code.google.comのEulaモジュールはうまく機能しますが、何らかの理由でUnicode文字(©など)を表示しません。

AlertDialogsはUnicode文字を完全に表示できることを知っています。これは、アプリの他のダイアログで表示するためです。

Eulaのダイアログと他のダイアログとの唯一の違いは、Eula.javaダイアログがアセットフォルダー内のテキストファイルから文字列を取得することです。

  private static CharSequence readEula(Activity activity) {
    BufferedReader in = null;
    try {
      in = new BufferedReader(new InputStreamReader(activity.getAssets().open(ASSET_EULA)));
      String line;
      StringBuilder buffer = new StringBuilder();
      while ((line = in.readLine()) != null)
        buffer.append(line).append('\n');
      return buffer;
    }
    catch (IOException e) {
      return "";
    }
    finally {
      closeStream(in);
    }
  }

そのテキストファイルはNotepad++ですべてのUnicode文字を表示するので、アセットファイルからAlertDialogに向かう途中で、文字列に対して何かをしているのではないかとInputStreamReader疑うBufferedReaderしかありません。StringBuilder

Eula.javaにUnicodeを表示させるにはどうすればよいですか?

4

2 に答える 2

4

ソースInputStreamReaderデータのエンコーディングを指定します。このクラスは、データを UTF-16 文字データにトランスコードします。

于 2011-05-17T16:04:56.343 に答える
2

「通常の」Java では、引数が 1 つのInputStreamReaderコンストラクターはプラットフォームのデフォルトのエンコーディングを使用します。

Android では、これをわずかに異なる と定義しています。

このコンストラクターは、文字コンバーターをプロパティで指定されたエンコーディングに設定し、"file.encoding"プロパティが存在しない場合は ISO 8859_1 (ISO-Latin-1) にフォールバックします。

file.encodingそのため、アセットで使用されるエンコーディング (おそらく UTF-8) に設定するとうまくいくかもしれません。

または (編集できる場合)、コンストラクター呼び出しを2 つの引数のバージョンに変更し、この方法で正しいエンコーディングを指定します。

于 2011-05-17T16:07:29.177 に答える