У меня есть строка, содержащая символ � Я не смог его правильно заменить.
String.replace( "�", "");
не работает, кто-нибудь знает, как удалить/заменить � в строке??
У меня есть строка, содержащая символ � Я не смог его правильно заменить.
String.replace( "�", "");
не работает, кто-нибудь знает, как удалить/заменить � в строке??
Это символ замены Unicode,\uFFFD. (info)
Что-то вроде этого должно работать:
String strImport = "For some reason my �double quotes� were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");
Подобные проблемы с героями трудно диагностировать, поскольку информация легко теряется из-за неверного истолкования символов с помощью ошибок приложений, неправильной конфигурации, cut'n'paste и т.д.
Как я вижу (и, видимо, другие), вы ввели три символа:
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
Чтобы идентифицировать символ, загрузите и запустите программу из этой страницы. Вставьте свой символ в текстовое поле и выберите режим глифа; вставьте отчет в свой вопрос. Это поможет людям идентифицировать проблематичный характер.
Вы просите заменить символ "", но для меня это происходит как три символа "ï", "¿" и "½". Это может быть вашей проблемой... Если вы используете Java до Java 1.5, вы получаете только символы UCS-2, это только первые 65K символов UTF-8. Основываясь на других комментариях, наиболее вероятно, что характер, который вы ищете, это "", то есть символ замены Unicode. Это символ, который "используется для замены входящего символа, значение которого неизвестно или непредставимо в Unicode".
Собственно, глядя на комментарий от Kathy, другая проблема, которую вы можете иметь, заключается в том, что javac не интерпретирует ваш .java файл как UTF-8, предполагая, что вы пишете его в UTF-8. Попробуйте использовать:
javac -encoding UTF-8 xx.java
Или измените исходный код:
String.replaceAll("\uFFFD", "");
Как говорили другие, вы отправили 3 символа вместо одного. Я предлагаю вам запустить этот небольшой фрагмент кода, чтобы узнать, что на самом деле в вашей строке:
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));
}
}
Если вы опубликуете результаты этого, будет легче разобраться в происходящем. (Я не потрудился заполнить строку - мы можем сделать это путем проверки...)
Измените кодировку на UTF-8 во время разбора. Это приведет к удалению специальных символов
Используйте последовательность удаления unicode. Сначала вам нужно будет найти код для персонажа, которого вы хотите заменить (скажем, это ABCD в шестнадцатеричном формате):
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;
}
}
проанализировать код URL и unicode-ошибку. этот символ пришел ко мне, а также в google перевести в армянском тексте, а иногда и сломанную бирманку.
profilage bas� sur l'analyse de l'esprit
(французский)
должен быть переведен как:
profilage basé sur l'analyse de l'esprit
так что в этом случае �
= é
Нет ответа выше, разрешите мою проблему. Когда я загружаю xml, он apppends <xml
в мой xml. Я просто
xml = parser.getXmlFromUrl(url);
xml = xml.substring(3);// it remove first three character from string,
теперь он работает точно.