2012-02-24 21 views
0

データベースに格納されているUnicode形式の次の文字列を持っています。数値エンティティを読み取り可能な形式に変換します

كنت قد دخلت بالفعل في مكان آخر من 

ここで、その文字列を読み取り可能な形式に変換します。 Javaでは、どうしたらいいですか?

+2

これはUnicode形式ではなく、XML/HTML文字参照です。リテラル文字が期待されるデータベースにこれを置くと、データの品質が大幅に向上します。あなたはAndrzejによって概説されているようにアンエスケープすることでそれらを読むことができますが、長期的には、最初にこのデータを入れるものを修正する必要があります。送信されたフォームデータのHTML文字参照は、フォームページをUTF-8として配信していないということがよくあります。 – bobince

+1

その文字列はその言語でのみ必要です。文字列がurduにあった場合は、Unicode文字ではなくurduのみを表示する必要があります。 –

+0

?ウルドゥー語はUnicode文字です。 '&#' ... ';'はHTML文字参照エスケープです。 Unicode自体とは関係ありません。 – bobince

答えて

4

これらはHTMLエンティティなので、それらを表す文字に解決するいくつかの種類のライブラリメソッドが必要です。

たとえば、Apache CommonsにはStringEscapeUtils.unescapeHtmlがあります。他にもたくさんあります。

あなたが本当にあなたは、&#;間の数字をtokenise進intとしてそれらを解析し、Javaの文字に変換するCharacter.toCharsを呼び出すことができ、この特定のケースのために、何か自分自身をロールバックします。ライブラリを使用するよりも多くの作業が必要になり、バグが多くなります。

いずれかの結果を与える必要があります

ᘃᘆᕸᘂᖃᖃᖂᘄᕸᕶᕵᘄᘁᖓᘄᘁᘐᘅᘃᕵᘆᕰᖂᖅᘅᘆ

(ちなみに、私はあなたが '読める形式' によって何を意味するかについてより具体的にする必要がありだと思います。私はの文字列を読んでください。これはエンティティ参照のシーケンスです。あなたは開発者です。正確です!)

+0

Readableは、文字列がフランス語またはウルドゥー語である場合、その文字列がユニコードでない場合のみ表示されることを意味します。 –

+3

@BhavikAmbani私はあなたがAndrzejを誤解したと思うが、彼は実際にあなたの問題を解決している。ページを構築する際に、各文字に対してunescapeHtml関数を呼び出す必要があります。その後、自動的に正しい文字セットが使用されます。 – egrunin

+0

@Bhavik - しかし、文字列**はフランス語やウルドゥー語ではなく、US-ASCIIであり、HTMLエンティティ参照の文字列です。 :)これらの参照を解決して、一連のルールに基づいて文字列を相違点に変換する必要があります。どちらが有効かは確かですが、「読めるようにする」というのではなく、「エンティティの参照を解決する」と言うことがはっきりしています。とにかく、これは少しばかりの問題です。問題を解決するには、文字列をエスケープするための適切なメソッドを呼び出す必要があります。 –

関連する問題