3

これは基本的な質問ですが、SAで正確な重複を見つけることができませんでした。

私はこの文字列を持っています:

String s = "surname\":\"B\\u00f6rner\"},{\"forename\""

私が入手したいのは:

String s = "surname\":\"Börner\"},{\"forename\""

Javaでこれを行う方法はありますか?どうも!

4

4 に答える 4

1

バックスラッシュを手動で削除すると、Javaはユニコードをそのように解釈します。API呼び出しから受け取る文字列を変更できない場合は、次を使用できます。

s = s.replaceAll("\\\\u00f6", "\u00f6");
于 2012-08-11T11:33:09.297 に答える
1
    String s = "surname\":\"B\u00f6rner\"},{\"forename\"" ;
    try {
        String t = URLDecoder.decode(s, "UTF-8") ;
        System.out.println(t) ;
    }
    catch( Throwable t ) {
        t.printStackTrace(System.err) ;
    }

出力:surname":"Börner"},{"forename"

他の人が言うように、余分な\を削除する方法を見つける必要があります。

于 2012-08-11T11:35:16.440 に答える
1

Unicodeベースプレーンの外側の文字が必要ない限り、これはそれほど難しいことではありません。

final Matcher m = Pattern.compile("\\\\u(.{4})").matcher(
    "surname\":\"B\\u00f6rner\"},{\"forename\"");
final StringBuffer b = new StringBuffer();
while (m.find())
  m.appendReplacement(b, String.valueOf(((char)Integer.parseInt(m.group(1), 16))));
m.appendTail(b);
System.out.println(b);
于 2012-08-11T13:17:02.100 に答える
0

それがJavaソースコードである場合、2つの文字列リテラルはまったく同じことを意味します...(後者の場合)ソースファイルがエンコードされている文字セットをJavaコンパイラに指示する場合nativetoascii。 command)を使用して、ファイル内のユニコードエスケープをネイティブ文字-reverseに変換できます。\uxxxx

これらの文字列値が実際には文字列リテラルではなく文字列値である場合は、何らかの実行時変換を行う必要があります。(これを行うためのサードパーティのライブラリメソッドがあると確信しています...)

于 2012-08-11T11:35:28.223 に答える