A
A
Alex Ivanov2018-04-02 13:45:10
PHP
Alex Ivanov, 2018-04-02 13:45:10

How to remove � (question mark in a diamond) from text?

How to remove the character of a broken UTF character from the text, if this character has already been given so. Changing the encoding does nothing. str_replace, preg_replace I can’t do a character by character, because when copying from text, it changes to just a square

Answer the question

In order to leave comments, you need to log in

3 answer(s)
S
SagePtr, 2018-04-02
@Protossan

Для начала изучить текст и определить, а как собственно эти битые символы появились.
Если из-за того, что в некоторых местах текста между байтами символа был вставлен пробел - в таком случае можно просто удалить пробелы, которые располагаются там, где они в utf-8 невозможны (после 11xxxxxx или перед 10xxxxxx в двоичном представлении).

B
bbbcccc, 2019-05-15
@bbbcccc

Способ длинноватый, но простой и приемлемый для «почтичайников».
В тексте имеются символы «вопрос в черном ромбе» �. Удалить можно только вручную, по одному. Инструменты «найти» и «заменить» не помогают, они не видят этот символ. Применить макрос или код – не для всех. Вообще этот символ означает, что в исходном тексте были символы, отсутствующие в тексте с текущей кодировкой.
Создаем новый документ ворд, копируем в него символы, можно вместе с небольшим фрагментом текста, так, чтобы в будущем по положению в тексте можно было найти символ, даже если все будет заменено на абракодабру. Удобно повторить несколько символов в начале строки.
Сохраняем текст.
В настройках ворд на вкладке файл-параметры-дополнительно-группа «общие» (внизу) ставим птичку «подтверждать преобразование формата файла при открытии»
Сохраняем текст в txt. При нажатии «сохранить» появится окно «преобразование файла». По умолчанию стоит кодировка виндовс. Справа под окном кодировок будет предупреждение о том, что «текст, выделенный красным невозможно сохранить в выбранной кодировке». Ниже в окне образца, пролистав его увидите красные символы. Слева вверху три варианта кодировки. Ставим точку «Другая». Активируется окно кодировок. Находим кодировку, при которой символы в образце становятся некрасными, но текст читается. Мне помогла кодировка «Китайская упрощенная (GB 18030)». Юникод не помог, т.к. в будущем при замене инструмент «заменить» не увидел некоторых символов этой кодировки. Т.е. в китайской кодировке символы, заменившие � ромб совпали с виндовс (я так понимаю ANSI), а в Юникоде � ромб заменился на символы, часть которых отсутствует в кодировке виндовс. Жмем ОК.
Закрыть.
Открыть с помощью Ворд. При открытии в запросе выбрать обычный текст. Откроется абракодабра.
В абракодабре найти символ (скорее всего группу символов), соответствующие символу � ромб.
Инструментом «заменить» заменить найденные символы на какие-нибудь другие (потом моно будет просто менять).
Сохранить.
Закрыить.
Открыть с помощью ворд, выбрав опять кодировку «Китайская упрощенная (GB 18030)».
Сохранить как docx.
Может можно и проще. Смысл понятен. Проблема в разных символах в разных кодировках. Еще проще написать какой-нибудь код, но это не для массового пользователя.

R
ruslanyu, 2020-03-25
@ruslanyu

Evernotу ищет такие символы, через заменить вставляете что нужно.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question