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??
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", "\"");
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.
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", "");
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...)
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", "");
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;
}
}
changez L'encodage en UTF-8 pendant l'analyse .Cela supprimera les caractères spéciaux
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.
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.