web-dev-qa-db-ja.com

エスケープされたUnicode文字を実際の文字に戻す

Javaの文字列変数に次の値があります。

_Dodd\u2013Frank
_

の代わりに

_Dodd–Frank
_

(この値がこの文字列変数にどのように割り当てられるかを制御できないと仮定します)

さて、どうすれば適切に変換(エンコード)し、String変数に戻すことができますか?

私は次のコードを見つけました

_Charset.forName("UTF-8").encode(str);
_

しかし、これはByteBufferを返しますが、Stringを返したいです。

編集

いくつかの追加情報。

System.out.println(str);を使用すると

_Dodd\u2013Frank
_

正しい用語(UTF-8またはUnicode)が何であるかわかりません。そのことをご容赦ください。

27
Sudar

試してみる

str = org.Apache.commons.lang3.StringEscapeUtils.unescapeJava(str);

from Apache Commons Lang

52
jlordo

Java.util.Propertiesが '\ uXXXX'エスケープシーケンスの文字列をサポートしているという事実を利用して、次のようなことを行うことができます。

Properties p = new Properties();
p.load(new StringReader("key="+yourInputString));
System.out.println("Escaped value: " + p.getProperty("key"));

エレガントだが機能的。

14
drobert

おそらく、追加の依存関係なしに文字列を正しくデコードする次のソリューション。

これはscala replで動作しますが、Javaのみのソリューションで同様に動作するはずです。

import Java.nio.charset.StandardCharsets
import Java.nio.charset.Charset

> StandardCharsets.UTF_8.decode(Charset.forName("UTF-8").encode("Dodd\u2013Frank"))
res: Java.nio.CharBuffer = Dodd–Frank
2
cevaris

00B0(度記号、または「primero」のスペイン語の略語のように上付き文字「o」など)のUnicode値があるとします

これはあなたが望むことをする関数です:

public static String  unicodeToString( char  charValue )
{
    Character   ch = new Character( charValue );

    return ch.toString();
}
0
user6515422

StringEscapeUtils.unescapeXmlを使用して、XML結果を提供するAPIからロードされた文字列をエスケープ解除しました。

0
Joy