Pregunta

Tengo una cadena que contiene un personaje � no he podido reemplazarla correctamente.

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

No funciona, ¿alguien sabe cómo eliminar/reemplazar el � en la cadena?

¿Fue útil?

Solución

Ese es el personaje de reemplazo de Unicode, Ufffd. (información)

Algo como esto debería funcionar:

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

Otros consejos

Los problemas de los personajes como este son difíciles de diagnosticar porque la información se pierde fácilmente a través de la interpretación errónea de los caracteres a través de errores de aplicaciones, configuración errónea, corte, etc.

Como yo (y aparentemente otros) lo veo, has pegado tres personajes:

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 el personaje, descargue y ejecute el programa desde esta página. Pegue su personaje en el campo de texto y seleccione el modo Glyph; Pegue el informe en su pregunta. Ayudará a las personas a identificar el carácter problemático.

Estás pidiendo reemplazar al personaje "�", pero para mí eso está llegando como tres personajes 'ï', '¿' y '½'. Este podría ser su problema ... si está utilizando Java antes de Java 1.5, entonces solo obtiene los caracteres UCS-2, que son solo los primeros 65k UTF-8 caracteres. Según otros comentarios, es muy probable que el personaje que está buscando es '�', ese es el carácter de reemplazo de Unicode. Este es el personaje que se "utiliza para reemplazar un carácter entrante cuyo valor es desconocido o no representable en Unicode".

En realidad, al mirar el comentario de Kathy, el otro problema que podría estar teniendo es que Javac no está interpretando su archivo .java como UTF-8, suponiendo que lo está escribiendo en UTF-8. Intenta usar:

javac -encoding UTF-8 xx.java

O modifique su código fuente para hacer:

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

Como otros han dicho, publicaste 3 personajes en lugar de uno. Le sugiero que ejecute este pequeño fragmento de código para ver lo que Realmente En tu cadena:

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

Si publica los resultados de eso, será más fácil resolver lo que está sucediendo. (No me he molestado en rellenar la cadena, podemos hacerlo por inspección ...)

Cambie la codificación a UTF-8 mientras se analiza. Esto eliminará los caracteres especiales

Utilizar el secuencia de escape unicode. Primero tendrá que encontrar el punto de código para el personaje que busca reemplazar (digamos que es ABCD en Hex):

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

Para detalles

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

Diseccionar el código de URL y el error unicode. Este símbolo se me ocurrió también en Google Translate en el texto armenio y, a veces, el birmano roto.

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

debe traducirse como:

profilage basé sur l'analyse de l'esprit

Entonces, en este caso � = é

No hay respuesta anterior Resolver mi problema. Cuando descargo xml it appPends <xml a mi XML. Yo simplemente

xml = parser.getXmlFromUrl(url);

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

Ahora se está ejecutando con precisión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top