Comment remplacer ï ¿½dans une chaîne

j'ai une chaîne qui contient un caractère que je n'ai pas pu remplacer correctement.

Chaîne de caractères.remplacer ("ï ¿ ½ ","");

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

24
demandé sur Josh Lee 2009-09-28 23:20:47

9 réponses

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

quelque Chose comme ça devrait fonctionner:

String strImport = "For some reason my �double quotes� were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");
31
répondu Gunslinger47 2009-09-28 21:49:34

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

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

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, téléchargez et lancez le programme à partir de cette page. Collez votre caractère dans le champ de texte et sélectionnez le mode glyphe; collez le rapport dans votre question. Ça aidera les gens à identifier le caractère problématique.

16
répondu McDowell 2009-09-28 21:08:00

Vous demandant de remplacer le caractère "�", mais pour moi qui est à venir par le biais de trois caractères 'ï', '¿' et '½'. Ce pourrait être votre problème... Si vous utilisez Java avant Java 1.5, vous n'obtiendrez que les caractères UCS-2, c'est-à-dire les premiers caractères UTF-8 de 65K. Sur la base d'autres commentaires, il est plus que probable que le caractère que vous cherchez est"�", c'est le caractère de remplacement Unicode. C'est le personnage qui est "utilisé pour remplacer un caractère entrant dont la valeur s'il est inconnu ou non-représentable dans Unicode".


javac -encoding UTF-8 xx.java

Ou modifier votre code source pour le faire:

String.replaceAll("\uFFFD", "");
8
répondu Paul Wagland 2009-10-01 20:31:59

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

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 l', il sera plus facile de travailler sur ce qui se passe. (Je n'ai pas pris la peine de rembourrer la corde - nous pouvons le faire par inspection...)

5
répondu Jon Skeet 2009-09-28 19:38:42

séquence d'échappement unicode. Tout d'abord, vous devez trouver le point de code pour le personnage que vous cherchez à remplacer (disons QU'il est ABCD dans hex):

str = str.replaceAll("\uABCD", "");
0
répondu matt b 2009-09-28 19:40:15

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
répondu Xar E Ahmer 2015-01-07 07:24:06

changez L'encodage en UTF-8 pendant l'analyse .Cela supprimera les caractères spéciaux

0
répondu Arjun 2015-08-18 05:58:56

disséquer le code D'URL et l'erreur unicode. ce symbole est venu à moi aussi sur google translate dans le texte arménien et parfois cassés birman.

0
répondu user6302004 2016-05-06 20:11:21

Pas de réponse ci-dessus pour résoudre mon problème. Quand je télécharge xml il ajoute <xml à mon xml. J'ai simplement

xml = parser.getXmlFromUrl(url);

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

maintenant il fonctionne avec précision.

-1
répondu Xar E Ahmer 2015-01-07 07:54:41