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 ??
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", "\"");
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.
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", "");
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 ...)
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", "");
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é.
Modifiez le codage en UTF-8 lors de l’analyse. Ceci supprimera les caractères spéciaux.
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;
}
}