2009-09-28 12 views
24

J'ai une chaîne qui contient un caractère � Je n'ai pas été en mesure de le remplacer correctement.Comment remplacer � dans une chaîne

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

ne fonctionne pas, quelqu'un sait-il comment supprimer/remplacer le � dans la chaîne ??

+4

Quel est le (s) point (s) de code Unicode pour ce que vous voulez remplacer? –

+3

Selon la réponse de Gunslinger47, le caractère que MrThys veut remplacer est presque certainement " ", car il a la séquence UTF-8 de 0xEF 0xBF 0xBD, qui est la séquence qui nous a été donnée par McDowell –

+6

Pour tous ceux qui ont trébuché sur ce, et ne comprend pas pourquoi les caractères '" �' sont produits pendant le traitement, il y a une écriture (** avertissement: ** je l'ai écrit) qui explique pourquoi cela arrive, à [cette question StackOverflow] (http://stackoverflow.com/questions/6366912/reading-file-from-windows-and-linux-yields-different-results-character-encoding/6367675#6367675). –

Répondre

30

C'est le caractère de remplacement Unicode, \ uFFFD. (info)

Quelque chose comme cela devrait fonctionner:

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

dans ce cas, vous savez que je t était les guillemets doubles mais techniquement ces chars manquants peuvent être d'autres caractères, correct? –

+1

@Elzo: Oui. En regardant ma ficelle, les deux personnages étaient probablement "et" pour commencer, mais ils auraient pu être un tas d'autres choses. – Gunslinger47

+0

J'ai également résolu cela en ouvrant le db dans le textwrangler et faire une recherche et remplacer –

8

Vous demandez à remplacer le caractère " " mais pour moi cela se présente comme trois caractères 'ï', '¿' et '½'. Cela pourrait être votre problème ... Si vous utilisez Java avant Java 1.5 alors vous obtenez seulement les caractères UCS-2, ce sont seulement les premiers caractères UTF-8 65K. Basé sur d'autres commentaires, il est fort probable que le caractère que vous recherchez soit ' ', c'est-à-dire le caractère de remplacement Unicode. C'est le caractère qui est "utilisé pour remplacer un caractère entrant dont la valeur est inconnue ou non représentable en Unicode". En fait, en regardant le commentaire de Kathy, l'autre problème que vous pourriez avoir est que javac n'interprète pas votre fichier .java comme UTF-8, en supposant que vous l'écrivez en UTF-8. Essayez d'utiliser:

javac -encoding UTF-8 xx.java 

Ou, modifiez votre code source pour faire:

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

� est vu comme 1 char – Thys

+0

Pour vous, il pourrait être vu comme un caractère, le reste d'entre nous ne sont pas si chanceux ;-) S'il vous plaît dites-nous le point de code du caractère que vous essayez de remplacer –

5

Comme d'autres l'ont dit, vous avez posté 3 caractères au lieu d'un. Je vous suggère de faire tourner ce petit bout de code pour voir ce qui est en fait dans votre chaîne:

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 vous publiez les résultats de cela, il sera plus facile de comprendre ce qui se passe. (Je n'ai pas pris la peine de rembourrer la chaîne - nous pouvons le faire par inspection ...)

0

Utilisez le unicode escape sequence. D'abord, vous devrez trouver le point de code pour le personnage que vous cherchez à remplacer (disons simplement qu'il est ABCD en hexadécimal):

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

questions de caractère comme celui-ci sont difficiles à diagnostiquer parce que l'information est facilement perdue par une mauvaise interprétation des caractères par bugs d'une application, une mauvaise configuration cut'n'paste, etc.

Comme je l'ai (et apparemment d'autres) voir, vous avez collé trois personnages:

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 

Pour identifier le caractère, le téléchargement et exécuter le programme de this page. Collez votre personnage dans le champ de texte et sélectionnez le mode glyphe; Collez le rapport dans votre question. Cela aidera les gens à identifier le caractère problématique.

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

Aucune réponse ci-dessus résoudre mon problème. Quand je télécharge le xml il ajoute <xml à mon xml.Je simplement

xml = parser.getXmlFromUrl(url); 

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

maintenant il fonctionne avec précision.

0

modifier le codage UTF-8 lors de l'analyse .Cette supprimera les caractères spéciaux

0

disséquer le code URL et une erreur de unicode. ce symbole m'est venu aussi bien sur google translate dans le texte arménien que parfois sur le burmese cassé.

Questions connexes