32

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

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

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

4

10 に答える 10

40

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

このようなものが機能するはずです:

String strImport = "For some reason my �double quotes� were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");
于 2009-09-28T21:49:34.747 に答える
17

このような文字の問題は、アプリケーションのバグ、設定の誤り、カットアンドペーストなどによる文字の誤解によって情報が簡単に失われるため、診断が困難です。

私(そして明らかに他の人)が見ているように、あなたは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

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

于 2009-09-28T21:08:00.353 に答える
11

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

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

javac -encoding UTF-8 xx.java

または、ソースコードを次のように変更します。

String.replaceAll("\uFFFD", "");
于 2009-09-28T19:30:14.420 に答える
6

他の人が言っているように、あなたは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));
    }
}

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

于 2009-09-28T19:38:42.810 に答える
1

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

于 2015-08-18T05:58:56.860 に答える
1

profilage bas� sur l'analyse de l'esprit(フランス語)

次のように翻訳する必要があります:

profilage basé sur l'analyse de l'esprit

したがって、この場合�=é

于 2019-08-18T15:29:43.283 に答える
0

Unicodeエスケープシーケンスを使用します。まず、置き換えようとしている文字のコードポイントを見つける必要があります(16進数でABCDであるとしましょう)。

str = str.replaceAll("\uABCD", "");
于 2009-09-28T19:40:15.857 に答える
0

詳細はこちら

import java.io.UnsupportedEncodingException;

/**
 * File: BOM.java
 * 
 * check if the bom character is present in the given string print the string
 * after skipping the utf-8 bom characters print the string as utf-8 string on a
 * utf-8 console
 */

public class BOM
{
    private final static String BOM_STRING = "Hello World";
    private final static String ISO_ENCODING = "ISO-8859-1";
    private final static String UTF8_ENCODING = "UTF-8";
    private final static int UTF8_BOM_LENGTH = 3;

    public static void main(String[] args) throws UnsupportedEncodingException {
        final byte[] bytes = BOM_STRING.getBytes(ISO_ENCODING);
        if (isUTF8(bytes)) {
            printSkippedBomString(bytes);
            printUTF8String(bytes);
        }
    }

    private static void printSkippedBomString(final byte[] bytes) throws UnsupportedEncodingException {
        int length = bytes.length - UTF8_BOM_LENGTH;
        byte[] barray = new byte[length];
        System.arraycopy(bytes, UTF8_BOM_LENGTH, barray, 0, barray.length);
        System.out.println(new String(barray, ISO_ENCODING));
    }

    private static void printUTF8String(final byte[] bytes) throws UnsupportedEncodingException {
        System.out.println(new String(bytes, UTF8_ENCODING));
    }

    private static boolean isUTF8(byte[] bytes) {
        if ((bytes[0] & 0xFF) == 0xEF && 
            (bytes[1] & 0xFF) == 0xBB && 
            (bytes[2] & 0xFF) == 0xBF) {
            return true;
        }
        return false;
    }
}
于 2015-01-07T07:24:06.080 に答える
0

URLコードとUnicodeエラーを分析します。このシンボルは、アルメニア語のテキストと時には壊れたビルマ語のグーグル翻訳でも私に来ました。

于 2016-05-06T20:11:21.700 に答える
-2

上記の答えは私の問題を解決しません。xmlをダウンロード<xmlすると、xmlに追加されます。私は単に

xml = parser.getXmlFromUrl(url);

xml = xml.substring(3);// it remove first three character from string,

今では正確に実行されています。

于 2015-01-07T07:54:41.687 に答える