Delphi декодировано base64 во что-то - PullRequest
1 голос
/ 13 июля 2020

Я немного застрял в декодировании. У меня есть файл .rtf в кодировке base64.

Небольшая часть этого выглядит так: Bek\u252\''fcld\u337\''3f

Что представляет: Beküldő

Но мой вывод данные после декодирования: Bekuld?

Если я вручную заменяю символы, это работает.

StringReplace(Result, 'U337\''3F', '''F5', [rfReplaceAll, rfIgnoreCase]);

Кто-нибудь знает общее решение для этого? Какой-то разговор или что-то в этом роде?

1 Ответ

2 голосов
/ 13 июля 2020

Например, \u242 означает символ Юникода # 242.

Таким образом, вы можете искать \u в содержимом RTF (игнорируя любую \\ экранированную последовательность), затем получить следующий номер и используйте его как символ.

Но RTF - очень сложный зверь.

Проверьте, что спецификации RTF 1.5 говорят о кодировке:

\uN Это ключевое слово представляет один символ Unicode, который не имеет эквивалентного представления ANSI на основе текущей кодовой страницы ANSI. N представляет значение символа Юникода, выраженное в виде десятичного числа. За этим ключевым словом сразу следует эквивалентный символ (символы) в представлении ANSI. Таким образом, старые считыватели проигнорируют ключевое слово \uN и правильно воспримут ANSI-представление. Когда встречается это ключевое слово, читатель должен игнорировать следующие N символы, где N соответствует последнему встреченному значению \ucN.

Возможно, самым простым является использование скрытого RichEdit для декодирование, под Windows / VCL.

...