Как из строки удалить спец символ xEF (BOM ?)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как из строки удалить спец символ xEF (BOM ?)

Сообщение jsa » 04.04.2025 12:10:27

Подскажите пожалуйста как избавиться от спец символов в строке?
Получаю json с телеграмма
Если пользователь вставляет эмодзи с некоторыми приходят символы
, "text" : "☀}
В текстовый файл записывается нормально, а дальше копипастой уже не берется никак/
При сохранении в базу MS SQL ругается - Unclosed quotation mark after the character string '☀'. Incorrect syntax near '☀'.
BOMtext.png


Погуглил как удалять BOM символы, вроде для этого есть функция UTF8BOMToUTF8
но ее применение результата не дает.

Добавлено спустя 26 минут 32 секунды:
Вопрос закрываю. Нашел https://ru.wikipedia.org/wiki/Маркер_последовательности_байтов
и тут есть коды этих символов.
ну и ...
Код: Выделить всё
txtSend := StringReplace(txtSend, char(239),'',[rfReplaceAll]);
txtSend := StringReplace(txtSend, char(187),'',[rfReplaceAll]);
txtSend := StringReplace(txtSend, char(191),'',[rfReplaceAll]);   
У вас нет необходимых прав для просмотра вложений в этом сообщении.
jsa
постоялец
 
Сообщения: 288
Зарегистрирован: 28.11.2017 13:46:04

Re: Как из строки удалить спец символ xEF (BOM ?)

Сообщение sts » 04.04.2025 12:43:30

The byte 0xEF can appear in UTF-8 byte sequences, but only in very specific circumstances, it is too high (> 0x7F) to be a single character. However in Perl xEF or x{ef} does not refer to the byte 0xEF, but the Unicode code point U+00EF which is represented in UTF-8 as 0xC3 0xAF.


Добавлено спустя 5 минут 34 секунды:
получается json от телеграмма с ошибкой пришел
sts
постоялец
 
Сообщения: 451
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Как из строки удалить спец символ xEF (BOM ?)

Сообщение jsa » 06.04.2025 15:20:54

Ситуация оказалась сложнее.
Если бездумно резать эти символы то рушится текст который приходит с теми эмодзи с которыми раньше было все в порядке.

Теперь надо понять как разобраться с ситуацией.
jsa
постоялец
 
Сообщения: 288
Зарегистрирован: 28.11.2017 13:46:04

Re: Как из строки удалить спец символ xEF (BOM ?)

Сообщение Ichthyander » 06.04.2025 15:32:47

Здесь не телеграм виноват. Нужно посмотреть в каком месте при преобразовании строк и их кодировок теряются данные. От телеграм не могут приходит строки с BOM
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 696
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Как из строки удалить спец символ xEF (BOM ?)

Сообщение jsa » 07.04.2025 06:59:20

Спасибо, так и оказалось.
Код: Выделить всё
var IdHTTP_post: TidHTTP;
    sResp: RawByteString; //string;
    txt2: string; 
    JsonToSend: TStream;
    jsonObj: TJSONObject;     
Begin
              sResp:= IdHTTP_post.Post(teleurl, JsonToSend);   // вывод в лог sResp
              jsonObj:= GetJSON(sResp) as TJSONObject;     
              txt2 :=jsonObj.AsJSON ;  // вывод в лог txt2
end;


вывод в лог sResp - ..."text":"u2600ufe0f"}
вывод в лог txt2 - ..."text" : "☀}

Добавлено спустя 3 часа 36 минут 5 секунд:
Закрываю тему. Продолжение тут viewtopic.php?f=5&t=43899
jsa
постоялец
 
Сообщения: 288
Зарегистрирован: 28.11.2017 13:46:04


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru