Javaの文字列変数に次の値があります。
_Dodd\u2013Frank
_
の代わりに
_Dodd–Frank
_
(この値がこの文字列変数にどのように割り当てられるかを制御できないと仮定します)
さて、どうすれば適切に変換(エンコード)し、String
変数に戻すことができますか?
私は次のコードを見つけました
_Charset.forName("UTF-8").encode(str);
_
しかし、これはByteBuffer
を返しますが、String
を返したいです。
編集:
いくつかの追加情報。
System.out.println(str);
を使用すると
_Dodd\u2013Frank
_
正しい用語(UTF-8またはUnicode)が何であるかわかりません。そのことをご容赦ください。
Java.util.Propertiesが '\ uXXXX'エスケープシーケンスの文字列をサポートしているという事実を利用して、次のようなことを行うことができます。
Properties p = new Properties();
p.load(new StringReader("key="+yourInputString));
System.out.println("Escaped value: " + p.getProperty("key"));
エレガントだが機能的。
おそらく、追加の依存関係なしに文字列を正しくデコードする次のソリューション。
これは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
00B0(度記号、または「primero」のスペイン語の略語のように上付き文字「o」など)のUnicode値があるとします
これはあなたが望むことをする関数です:
public static String unicodeToString( char charValue )
{
Character ch = new Character( charValue );
return ch.toString();
}
StringEscapeUtils.unescapeXml
を使用して、XML結果を提供するAPIからロードされた文字列をエスケープ解除しました。