Как заменить � в строке

С другой стороны, что-то не использующее регулярные выражения вообще:

prefix, data = var[:3], var[3:]
if prefix == 'foo':
    # do something with data
elif prefix == 'bar':
    # do something with data
elif prefix == 'baz':
    # do something with data
else:
    # do something with var

, Подходит ли это, зависит от Вашей фактической проблемы. Не забывайте, регулярные выражения не являются швейцарским ножом, что они находятся в Perl; Python имеет различные конструкции для того, чтобы сделать обработку строк.

25
задан Josh Lee 24 September 2013 в 02:59
поделиться

5 ответов

Это Символ замены Unicode, \ uFFFD. ( info )

Должно получиться что-то вроде этого:

String strImport = "For some reason my �double quotes� were lost.";
strImport = strImport.replaceAll("\uFFFD", "\"");
33
ответ дан 28 November 2019 в 20:33
поделиться

Character issues like this are difficult to diagnose because information is easily lost through misinterpretation of characters via application bugs, misconfiguration, cut'n'paste, etc.

As I (and apparently others) see it, you've pasted three characters:

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

To identify the character, download and run the program from this page. Paste your character into the text field and select the glyph mode; paste the report into your question. It'll help people identify the problematic character.

16
ответ дан 28 November 2019 в 20:33
поделиться

Вы просите заменить символ « », но для меня это три символа «ï», «¿» и «½». Это может быть вашей проблемой ... Если вы используете Java до Java 1.5, вы получаете только символы UCS-2, то есть только первые 65K символов UTF-8. Основываясь на других комментариях, наиболее вероятно, что искомый символ - это « », то есть символ замены Unicode. Это символ, который «используется для замены входящего символа, значение которого неизвестно или непредставимо в Unicode».

На самом деле, глядя на комментарий Кэти, другая проблема, с которой вы можете столкнуться, заключается в том, что javac не интерпретирует ваш .java файл как UTF-8, предполагая, что вы пишете его в UTF-8. Попробуйте использовать:

javac -encoding UTF-8 xx.java

Или измените исходный код следующим образом:

String.replaceAll("\uFFFD", "");
10
ответ дан 28 November 2019 в 20:33
поделиться

Как уже говорили другие, вы отправили 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));
    }
}

Если вы опубликуете результаты, вам будет легче понять, что происходит. (Я не удосужился заполнить строку - мы можем сделать это путем проверки ...)

5
ответ дан 28 November 2019 в 20:33
поделиться

Используйте escape-последовательность Unicode . Сначала вам нужно найти код символа, который вы хотите заменить (скажем, это ABCD в шестнадцатеричном формате):

str = str.replaceAll("\uABCD", "");
-1
ответ дан 28 November 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: