2009-09-28 24 views
24

Tengo una cadena que contiene un carácter � No he podido reemplazarla correctamente.Cómo reemplazar ï ¿½ en una cadena

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

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

+4

¿Cuál es el/los punto (s) de código Unicode para lo que quiere reemplazar? –

+3

Según la respuesta de Gunslinger47, el personaje que MrThys quiere reemplazar es casi con certeza " ", ya que tiene la secuencia UTF-8 de 0xEF 0xBF 0xBD, que es la secuencia que McDowell nos dio –

+6

Para cualquiera que haya tropezado sobre esto, y no entiende por qué los caracteres '" �' se producen durante el procesamiento, hay un informe (** descargo de responsabilidad: ** Lo escribí) que explica por qué sucede, en [esta pregunta de StackOverflow] (http://stackoverflow.com/questions/6366912/reading-file-from-windows-and-linux-yields-different-results-character-encoding/6367675#6367675). –

Respuesta

30

Ese es el carácter de reemplazo Unicode, \ uFFFD. (info)

Algo como esto debería funcionar:

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

en este caso usted sabe que yo Fueron las comillas dobles pero técnicamente esos caracteres faltantes pueden ser otros caracteres, ¿correcto? –

+1

@Elzo: Sí. Mirando mi hilo, los dos personajes eran probablemente "y" para empezar, pero podrían haber sido cualquier cantidad de otras cosas. – Gunslinger47

+0

también solucioné esto abriendo el db en textwrangler y haciendo un buscar y reemplazar –

8

Usted está pidiendo reemplazar el carácter " " pero para mí viene con tres caracteres 'ï', '¿' y '½'. Este podría ser su problema ... Si usa Java antes que Java 1.5, solo obtendrá los caracteres UCS-2, que son solo los primeros 65K caracteres UTF-8. Según otros comentarios, lo más probable es que el personaje que está buscando sea ' ', que es el personaje de reemplazo Unicode. Este es el carácter que se "usa para reemplazar un carácter entrante cuyo valor es desconocido o no se puede representar en Unicode".

En realidad, mirando el comentario de Kathy, el otro problema que puede tener es que javac no está interpretando su archivo .java como UTF-8, suponiendo que lo está escribiendo en UTF-8. Trate de usar:

javac -encoding UTF-8 xx.java 

O, modificar el código fuente para hacerlo:

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

� se ve como 1 char – Thys

+0

Para usted puede ser visto como un personaje, el resto de nosotros no tenemos tanta suerte ;-) Por favor, díganos el código del personaje que está tratando de reemplazar. –

5

Como han dicho otros, se registraron 3 caracteres en lugar de uno. Sugiero ejecutar este pequeño fragmento de código para ver qué hay en realidad en su 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)); 
    } 
} 

En caso de publicar los resultados de eso, será más fácil de averiguar lo que está pasando. (No me he molestado en rellenar la cuerda; podemos hacerlo mediante inspección ...)

0

Utilice unicode escape sequence. Primero usted tiene que encontrar el punto de código del carácter que pretende sustituir (simplemente digamos que es ABCD en hexadecimal):

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

cuestiones personaje como este son difíciles de diagnosticar debido a que la información se pierde fácilmente a través de la mala interpretación de personajes a través de los errores de aplicación, una mala configuración, Cortar y pegar, etc.

Como yo (y al parecer otros) lo veo, ha 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 carácter, descarga y ejecutar el programa desde this page. Pega tu personaje en el campo de texto y selecciona el modo de glifo; pegue el informe en su pregunta. Ayudará a las personas a identificar el personaje problemático.

0

for detail

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

Sin respuesta anterior resolver mi problema. Cuando descargo xml, aplica <xml a mi xml.Simplemente

xml = parser.getXmlFromUrl(url); 

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

ahora se está ejecutando con precisión.

0

cambiar la codificación UTF-8 al analizar .Esta eliminará los caracteres especiales

0

diseccionar el código URL y error Unicode. este símbolo vino a mí también en Google translate en el texto armenio y, a veces, el birmano roto.

Cuestiones relacionadas