3

ソース HTML 文字列 (記号を含む) は、strings.xml リソース ファイルから取得され、WebView に表示される予定です。リソースでこれをテストしました:

<string name="MY_STRING">®</string>
  • リソース内の実際の商標記号 (®) を使用してプロジェクトをビルドしますが、WebView に表示すると "®" として表示されます (つまり、"A" サーカムフレックスの後に登録商標記号が続きます)。つまり、2 つの文字が表示されます。 、最初の不正確で不要なもの。
  • エンティティ参照を使用すると、同じ結果が表示されます。&#174;
  • の使用&reg;は失敗し、プロジェクトはビルドされません。

これは、文字列リソースを WebView にプッシュするコードです。

String html = getString(R.string.MY_STRING);
((WebView)findViewById(R.id.terms_web_view)).loadData(html, "text/html", "UTF-8");

これも試しましたが、役に立ちませんでした: webView.getSettings().setDefaultTextEncodingName("UTF-8");

HTML 文字列を Logcat にプッシュしたところ、正常に表示され、シンボルが正しく表示されました。文字列に問題がなく、WebView が UTF-8 を使用するように設定されている場合、シンボルが正しく表示されないのはなぜですか?

更新 他のデバイスでテストしました。この問題は、Android v4.04 の Galaxy Nexus でのみ再現できます。Nexus One v2.3.x、v2.3.x の Wildfire S、v3.2 の Samsung Tab 10.1 では正常に動作します。これが ICS の問題であることを明確にするために、質問のタイトルを変更しました。

4

3 に答える 3

5

文字列リソースは、任意のエンティティ参照を含む任意のHTMLを保持するようには設計されていません。

事前にエスケープすると、任意のエンティティ参照を機能させることできる場合があります。

<string name="MY_STRING">&amp;reg;</string>

IIRC、へ&reg;の呼び出し後にデコードする必要がありますgetString()

一日の終わりに、あなたはに到達する必要があり&reg;ますWebView。文字列リソースを使用してそれを行う方法を決定できない場合は、この値を別の場所に格納する必要があります。

于 2012-04-11T13:34:00.543 に答える
1

loadData(html, "text/html", "UTF-8"); を使用しています。このメソッドは、変数 html に html 文字列を想定しています。そうではありません。試す

String html = "<html><body>My text is ®</body></html>";

例えば。

-- 完全な html ドキュメントを持つように更新

リソースファイルに保存する場合は、次を使用します。

<string name="MY_STRING" formatted="false"><html><body>My text is ®</body></html></string>
于 2012-04-11T13:02:13.193 に答える
1

これはAndroid開発者の答えではありませんが、誰かにテキストを送信しようとしていて、Ⓡも™も記号として使用できない場合の単純なものです(私のLG電話Android 7.0のように)。これらの記号をこのメッセージ スレッドからコピーして、自分宛てのメッセージに送信するか、簡単なメモに詰め込むだけです。その後、将来の使用のためにすぐに利用できるようになります。

于 2018-01-10T03:28:09.867 に答える