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

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

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

Ответить
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

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

Сообщение jsa »

Подскажите пожалуйста как избавиться от спец символов в строке?
Получаю 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]);    
У вас нет необходимых прав для просмотра вложений в этом сообщении.
sts
энтузиаст
Сообщения: 519
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

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 от телеграмма с ошибкой пришел
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

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

Теперь надо понять как разобраться с ситуацией.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Здесь не телеграм виноват. Нужно посмотреть в каком месте при преобразовании строк и их кодировок теряются данные. От телеграм не могут приходит строки с BOM
jsa
постоялец
Сообщения: 295
Зарегистрирован: 28.11.2017 12:46:04

Сообщение jsa »

Спасибо, так и оказалось.

Код: Выделить всё

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 секунд:
Закрываю тему. Продолжение тут http://www.freepascal.ru/forum/viewtopi ... =5&t=43899
Ответить