Pergunta

Eu tenho uma string que contém um caractere - não consegui substituí -la corretamente.

String.Replace ("ï“ "," ");

Não funciona, alguém sabe como remover/substituir a string?

Foi útil?

Solução

Esse é o caractere de substituição unicode, ufffd. (Info)

Algo assim deve funcionar:

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

Outras dicas

Problemas de personagens como esse são difíceis de diagnosticar, porque as informações são facilmente perdidas através da interpretação errônea dos personagens por meio de bugs de aplicativos, equívocos, cut'n'poste, etc.

Enquanto eu (e aparentemente outros) vêem, você colou três personagens:

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

Para identificar o personagem, baixar e executar o programa de esta página. Cole seu personagem no campo de texto e selecione o modo glifo; Cole o relatório em sua pergunta. Isso ajudará as pessoas a identificar o caráter problemático.

Você está pedindo para substituir o personagem "�", mas para mim está chegando como três caracteres 'ï', '¿' e '½'. Esse pode ser o seu problema ... se você estiver usando o Java antes do Java 1.5, então você só obtém os caracteres UCS-2, esse é apenas os primeiros 65K UTF-8 caracteres. Com base em outros comentários, é mais provável que o personagem que você esteja procurando seja '``', esse é o caractere de substituição do Unicode. Este é o personagem que é "usado para substituir um caractere de entrada cujo valor é desconhecido ou não representável no Unicode".

Na verdade, olhando para o comentário de Kathy, a outra questão que você pode ter é que o JAVAC não está interpretando seu arquivo .java como UTF-8, assumindo que você o está escrevendo no UTF-8. Tente usar:

javac -encoding UTF-8 xx.java

Ou modifique seu código -fonte para fazer:

String.replaceAll("\uFFFD", "");

Como outros disseram, você postou 3 caracteres em vez de um. Eu sugiro que você execute este pequeno trecho de código para ver o que é na realidade em sua string:

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));
    }
}

Se você postar os resultados disso, será mais fácil descobrir o que está acontecendo. (Não me preocupei em preencher a corda - podemos fazer isso por inspeção ...)

Altere a codificação para UTF-8 enquanto analisa. Isso removerá os caracteres especiais

Use o sequência de escape unicode. Primeiro, você terá que encontrar o CodePoint para o personagem que procura substituir (digamos que é ABCD em hexadecimal):

str = str.replaceAll("\uABCD", "");

Para detalhes

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;
    }
}

Disseca o código da URL e o erro Unicode. Este símbolo também veio a mim no Google traduz no texto armênio e às vezes no birmanês quebrado.

profilage bas� sur l'analyse de l'esprit (francês)

deve ser traduzido como:

profilage basé sur l'analyse de l'esprit

Então, neste caso � = é

Nenhuma resposta acima resolve meu problema. Quando eu baixar o XML, ele apppends <xml para o meu xml. eu simplesmente

xml = parser.getXmlFromUrl(url);

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

Agora está funcionando com precisão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top