33

以下のようにエンコードされたUTF-8文字を持つJavaの文字列変数に次の値があります

Dodd\u2013Frank

それ以外の

Dodd–Frank

(この値をこの文字列変数に割り当てる方法を制御できないと仮定します)

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

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

Charset.forName("UTF-8").encode(str);

しかし、これは を返しますがByteBufferStringバックが必要です。

編集

いくつかの追加情報。

私が使うとき、私はSystem.out.println(str);得る

Dodd\u2013Frank

正しい用語 (UTF-8 または Unicode) がわかりません。申し訳ありません。

4

8 に答える 8

60

試す

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

アパッチ・コモンズ・ラングより

于 2012-12-04T10:16:56.667 に答える
15

java.util.Properties

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

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

エレガントではありませんが、機能的です。

可能な を処理するにはIOExeception、try-catch が必要になる場合があります。

Properties p = new Properties();
try { p.load( new StringReader( "key=" + input ) ) ; } catch ( IOException e ) { e.printStackTrace(); }
System.out.println( "Escaped value: " + p.getProperty( "key" ) );
于 2014-06-04T20:27:31.247 に答える
0

以前StringEscapeUtils.unescapeXmlは、XML の結果を返す API からロードされた文字列をアンエスケープしていました。

于 2016-10-26T14:42:57.967 に答える
0

試す

str = org.apache.commons.text.StringEscapeUtils.unescapeJava(str);

org.apache.commons.lang3.StringEscapeUtils は非推奨であるため。

于 2021-06-11T06:40:43.030 に答える
-2

次のように、そのバイト バッファを文字列に変換できます。

import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.ByteBuffer

public static CharsetDecoder decoder = CharsetDecoder.newDecoder();

public static String byteBufferToString(ByteBuffer buffer)
{
    String data = "";
    try 
    {
        // EDITOR'S NOTE -- There is no 'position' method for ByteBuffer.
        //                   As such, this is pseudocode.
        int old_position = buffer.position();
        data = decoder.decode(buffer).toString();
        // reset buffer's position to its original so it is not altered:
        buffer.position(old_position);  
    }
    catch (Exception e)
    {
        e.printStackTrace();
        return "";
    }
    return data;
 }
于 2012-12-04T10:08:35.597 に答える