web-dev-qa-db-fra.com

Comment remplacer � dans une chaîne

J'ai une chaîne qui contient un caractère � je n'ai pas pu le remplacer correctement.

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

ne fonctionne pas, est-ce que quelqu'un sait comment enlever/remplacer le � dans la chaîne ??

24
Thys

C’est le caractère de remplacement Unicode,\uFFFD. ( Info )

Quelque chose comme ça devrait marcher:

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

Les problèmes de caractère tels que celui-ci sont difficiles à diagnostiquer car les informations sont facilement perdues du fait d'une mauvaise interprétation des caractères via des bogues d'application, une mauvaise configuration, un copier/coller, etc.

Comme je le vois (et apparemment d’autres), 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 personnage, téléchargez et exécutez le programme à partir de cette 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.

16
McDowell

Vous demandez de remplacer le caractère "" mais pour moi, cela se traduit par trois caractères "ï", "¿" et "½". C'est peut-être votre problème ... Si vous utilisez Java avant Java 1.5, vous n'obtenez que les caractères UCS-2, c'est-à-dire uniquement les 65 premiers caractères UTF-8. Selon d’autres commentaires, il est fort probable que le caractère que vous recherchez soit le caractère "", c’est-à-dire le caractère de remplacement Unicode. Il s'agit du caractère "utilisé pour remplacer un caractère entrant dont la valeur est inconnue ou non représentable dans Unicode".

En fait, si vous regardez 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’écriviez dans UTF-8. Essayez d'utiliser:

javac -encoding UTF-8 xx.Java

Ou modifiez votre code source pour faire:

String.replaceAll("\uFFFD", "");
10
Paul Wagland

Comme d'autres l'ont dit, vous avez posté 3 personnages au lieu d'un. Je vous suggère de lancer ce petit extrait 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 affichez les résultats, il sera plus facile de comprendre ce qui se passe. (Je n'ai pas pris la peine de rembourrer la corde - on peut le faire par inspection ...)

5
Jon Skeet

Utilisez la séquence d'échappement unicode . D'abord, vous devrez trouver le code correspondant au personnage que vous souhaitez remplacer (disons simplement qu'il s'agit de ABCD en hex)

str = str.replaceAll("\uABCD", "");
0
matt b

disséquer le code d'URL et l'erreur unicode. ce symbole m’est aussi venu sur google traduction dans le texte arménien et parfois le birman brisé.

0
user6302004

Modifiez le codage en UTF-8 lors de l’analyse. Ceci supprimera les caractères spéciaux. 

0
Arjun

pour les détails

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;
    }
}
0
Xar E Ahmer