web-dev-qa-db-ja.com

文字列の�を置換する方法

文字を含む文字列があります–正しく置き換えることができませんでした。

String.replace( "�"、 "");

動作しません、文字列内の�を削除/置換する方法を知っていますか?

25
Thys

それがUnicode置換文字、\ uFFFDです。 ( 情報

このような何かが動作するはずです:

String strImport = "For some reason my �double quotes� were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");
33
Gunslinger47

このようなキャラクターの問題は、アプリケーションのバグ、設定の誤り、切り取りと貼り付けなどによるキャラクターの誤った解釈によって情報が簡単に失われるため、診断が困難です。

私(および明らかに他の人)が見ているように、3つの文字を貼り付けました。

codepoint   glyph   escaped    windows-1252    info
=======================================================================
U+00ef      ï       \u00ef     ef,             LATIN_1_SUPPLEMENT, LOWERCASE_LETTER
U+00bf      ¿       \u00bf     bf,             LATIN_1_SUPPLEMENT, OTHER_PUNCTUATION
U+00bd      ½       \u00bd     bd,             LATIN_1_SUPPLEMENT, OTHER_NUMBER

キャラクターを識別するには、 このページ からプログラムをダウンロードして実行します。文字をテキストフィールドに貼り付けて、グリフモードを選択します。レポートを質問に貼り付けます。問題のあるキャラクターを特定するのに役立ちます。

16
McDowell

あなたは文字「�」を置き換えることを求めていますが、私にとってはそれは3つの文字「ï」、「¿」、および「½」としてやって来ています。これはあなたの問題かもしれません... Java 1.5より前のJavaを使用している場合、UCS-2文字のみを取得します。これは最初の65K UTF-8文字のみです。他のコメントに基づいて、探している文字は「�」、つまりUnicode置換文字である可能性が最も高いです。これは、「Unicodeで値が不明または表現できない着信文字を置き換えるために使用される」文字です。

実際、Kathyからのコメントを見ると、他の問題は、javacが.JavaファイルをUTF-8として解釈していないことです。UTF-8で記述していると仮定しています。使用してみてください:

javac -encoding UTF-8 xx.Java

または、ソースコードを変更して以下を実行します。

String.replaceAll("\uFFFD", "");
10
Paul Wagland

他の人が言ったように、あなたは1文字ではなく3文字を投稿しました。この小さなコードスニペットを実行して、文字列の実際を確認することをお勧めします。

public static void dumpString(String text)
{
    for (int i=0; i < text.length(); i++)
    {
        System.out.println("U+" + Integer.toString(text.charAt(i), 16) 
                           + " " + text.charAt(i));
    }
}

その結果を投稿すると、何が起こっているのかを簡単に把握できます。 (私は文字列のパディングを気にしませんでした-私たちは検査によってそれを行うことができます...)

5
Jon Skeet

解析中にエンコードをUTF-8に変更します。これにより、特殊文字が削除されます。

0
Arjun