2009-09-28 21 views
24

Ho una stringa che contiene un carattere � Non sono stato in grado di sostituirlo correttamente.Come sostituire � in una stringa

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

non funziona, qualcuno sa come rimuovere/sostituire il � nella stringa ??

+4

Quali sono i punti di codice Unicode per ciò che si desidera sostituire? –

+3

Come per la risposta di Gunslinger47, il personaggio che MrThys vuole sostituire è quasi certamente " ", in quanto ha la sequenza UTF-8 di 0xEF 0xBF 0xBD, che è la sequenza data a noi da McDowell –

+6

Per chi è scattato su questo, e non capisco perché i caratteri '" �' sono prodotti durante l'elaborazione, c'è un write-up (** disclaimer: ** l'ho scritto) che spiega perché succede, a [questa domanda StackOverflow] (http://stackoverflow.com/questions/6366912/reading-file-from-windows-and-linux-yields-different-results-character-encoding/6367675#6367675). –

risposta

30

Questo è il Carattere di sostituzione Unicode, \ uFFFD. (info)

Qualcosa del genere dovrebbe funzionare:

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

in questo caso sai che io erano le doppie virgolette ma tecnicamente quei caratteri mancanti possono essere altri caratteri, giusto? –

+1

@Elzo: Sì. Guardando la mia stringa, i due personaggi erano probabilmente "e" per cominciare, ma avrebbero potuto essere un numero qualsiasi di altre cose. – Gunslinger47

+0

ho risolto anche questo aprendo il db in textwrangler e facendo una ricerca e sostituzione –

8

Si sta chiedendo di sostituire il carattere " " ma per me che sta arrivando come tre caratteri 'ï', '¿' e '½'. Questo potrebbe essere il tuo problema ... Se usi Java prima di Java 1.5, ottieni solo i caratteri UCS-2, cioè solo i primi 65K caratteri UTF-8. Sulla base di altri commenti, è molto probabile che il personaggio che stai cercando sia " ", ovvero il carattere di sostituzione Unicode. Questo è il carattere che è "usato per sostituire un personaggio in arrivo il cui valore è sconosciuto o non rappresentabile in Unicode".

In realtà, guardando il commento di Kathy, l'altro problema che potresti avere è che javac non sta interpretando il tuo file .java come UTF-8, assumendo che tu lo stia scrivendo in UTF-8. Provare a utilizzare:

javac -encoding UTF-8 xx.java 

Oppure, modificare il codice sorgente di fare:

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

� viene visualizzato come 1 carattere – Thys

+0

Per te potrebbe essere visto come un personaggio, il resto di noi non è così fortunato ;-) Per favore dicci il punto di codice del personaggio che stai cercando di sostituire –

5

Come altri hanno detto, che hai postato 3 caratteri invece di uno. Vi suggerisco di eseguire questo piccolo frammento di codice per vedere cosa c'è in realtà nella stringa:

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 pubblichi i risultati di tale, sarà più facile per capire cosa sta succedendo. (Non mi sono preoccupato di riempire la stringa - possiamo farlo tramite l'ispezione ...)

0

Utilizzare unicode escape sequence. In primo luogo si dovrà trovare il codepoint per il personaggio che cercate di sostituire (diciamo solo dire che è ABCD in esadecimale):

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

questioni di carattere come questo sono difficili da diagnosticare perché le informazioni si perde facilmente attraverso errata interpretazione di caratteri tramite insetti di applicazione, errori di configurazione, cut'n'paste, ecc

Come ho (e apparentemente gli altri) lo vedo, avete incollato tre personaggi:

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 

per identificare il carattere, il download e eseguire il programma da this page. Incolla il tuo personaggio nel campo di testo e seleziona la modalità glifo; incolla il rapporto nella tua domanda. Aiuterà le persone a identificare il personaggio problematico.

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

No risposta di cui sopra risolvere il mio problema. Quando scarico xml, apppone <xml al mio xml.Ho semplicemente

xml = parser.getXmlFromUrl(url); 

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

ora funziona con precisione.

0

modificare la codifica UTF-8 durante l'analisi .Questo rimuoverà i caratteri speciali

0

sezionare il codice URL e l'errore unicode. questo simbolo è venuto anche a me su google translate nel testo armeno e, a volte, nel birmano spezzato.

Problemi correlati