15

だから私は現在commons lang apacheライブラリを使用しています。

この文字列をエスケープ解除しようとしたとき:😀 これは同じ文字列を返します:😀

String characters = "😀"
StringEscapeUtils.unescapeHtml(characters);

出力:😀

しかし、文字数が少ない文字列のエスケープを解除しようとすると、次のように機能します。

String characters = "㈳"
StringEscapeUtils.unescapeHtml(characters);

出力:㈳

何か案は?この String"😀"online unescaping utilityで unescaping しようとしたところ、動作するので、apache common langs ライブラリのバグでしょうか? または、誰かが別のライブラリを推奨できますか?

ありがとう。

更新:

文字列を正常にエスケープ解除できるようになりました。今の問題は、そのエスケープの結果をエスケープしようとしたときに、文字列が返されないことです (

4

5 に答える 5

4

unescapeHtml()ドキュメントにあるように、65,536 文字に制限されている HTML 4.0 エンティティのみをエスケープ解除する😀ため、そのままにしておきます。残念ながら、128,512 はその制限をはるかに超えています。

使ってみましたunescapeXml()か?

XML は、最大 1,114,111 (10FFFFh) 文字の実体をサポートします (リンク)。

于 2013-02-07T18:07:47.723 に答える
3

これはインデックスがU+1F600 (128512)- GRINNING FACEの Unicode 文字です。

詳しくはURL参照

あなたが言及した文字列は U+1F600 の HTML エスケープです。Apache commons lang を使用してエスケープ解除すると、スクリーンショットに示されているように、必要なスマイリーが描画されます

U+0000 から U+FFFF までの文字セットは、Basic Multilingual Plane (BMP) と呼ばれることがあります。コード ポイントが U+FFFF より大きい文字は補助文字と呼ばれます。Java プラットフォームは、char 配列と String および StringBuffer クラスで UTF-16 表現を使用します。この表現では、補助文字は char 値のペアとして表されます。最初は高サロゲート範囲 (\uD800-\uDBFF) から、2 番目は低サロゲート範囲 (\uDC00-\uDFFF) からです。

に変換されない更新について

于 2013-02-13T18:35:49.753 に答える
2

ええと-解決策はとても簡単です:代わりにorg.apache.commons.lang3.StringEscapeUtils.unescapeHtml4を使用してください!(Java <1.5を使用している場合を除き、おそらく使用しないでしょう)

String characters = "&#128512;";
StringEscapeUtils.unescapeHtml4(characters);
于 2013-02-12T04:08:48.530 に答える
1

問題は、ユニコード文字がない"&#128512;" ため、メソッドが単にこの文字列を返すことだと思います。

関数のドキュメントは

戻り値: 新しいエスケープされていない文字列、null 文字列入力の場合は null

于 2013-02-07T17:45:33.440 に答える
0

HTML 固有の質問の場合は、この目的のために JavaScript を使用できます。できるよ

    escape("&#128512;") which gives you %26%23128512%3B
    unescape("%26%23128512%3B") which gives you back &#128512;
于 2013-02-14T14:36:03.423 に答える