Difference between revisions of "DecodeString"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
m (1 revision imported)
 
(No difference)

Latest revision as of 08:41, 27 November 2023

  DecodeString (Функции работы со строками)
Статус разработки: Частичная реализация
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, число
Визуальность:Нет

Функция производит декодирование строки из указанного формата (к примеру, "Base64" или "UUE"). Могут декодироваться как ANSI, так и Unicode строки. См. также EncodeString.

Синтаксис

DecodeString(<Строка (STRING)>,<Формат декодирования (STRING)>="INTERNAL",<Результат в формате UTF-16 (INT)>=0,<Параметры декодирования (STRING)>):<Результат (STRING)>

Аргументы

  • <Строка (STRING)> - Аргумент, строковое представление которого необходимо декодировать.
  • <Формат декодирования (STRING)> - (необязательный аргумент) Текстовый аргумент с наименованием способа кодирования. Для краткого описания каждого способа, см. EncodeString. Возможны следующие значения:
    • Internal (по умолчанию)
    • Internal2
    • Internal3
    • Base64
    • QP, Quoted-printable (планируется к реализации)
    • Ascii85 (планируется к реализации)
    • PE, Percent-encoding, URL encoding (кодирование URL и пр. Пример: "%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82" UTF-8 строка "Привет", закодированная Percent-encoding). Третий аргумент функции игнорируется, исходная строка будет приниматься как ANSI и возвращаться как ANSI (конечное перекодирование в UTF-16 из UTF-8 выполняться не будет).
    • PUNY, Punycode (кодирование доменного имени URL с международными символами и пр. Пример: "xn--80adxhks.xn--p1ai" декодируется, как "москва.рф"). Размер строки для декодирования ограничен способом декодирования, при переполнении переменных декодировщика, будет возвращена пустая строка. Третий аргумент функции игнорируется, результат всегда возвращается в UTF-16. Декодирование может происходить в двух режимах. Режим задается в параметрах кодирования в виде MODE:<Режим> и может принимать значения:
      • 0 (по умолчанию) -- декодирование произвольных строк (игнорируется доменная структура строки <домен1>.<домен2>..., не удаляется префикс xn-- при наличии). К примеру, .-7sbf5ajmsd6a декодируется в москва.рф.
      • 1 -- декодирование доменных имен (каждое доменное имя из строки <домен1>.<домен2>... декодируется отдельно, удаляется префикс xn-- при наличии). К примеру, xn--80adxhks.xn--p1ai декодируется в москва.рф.
    • JSON (кодирование строк, добавляемых в документы JSON. Пример: "123\u002b234" декодируется, как "123+234"). Третий аргумент функции игнорируется, исходная строка будет приниматься как ANSI или UTF-16 и возвращаться как UTF-16. Декодируются комбинации \", \\, \/, \b, \t, \n, \f, \r и \u????.
    • UUE, Uuencoding (планируется к реализации)
  • <Результат в формате UTF-16 (INT)> - (необязательный аргумент) По умолчанию (0) декодированная строка будет возвращена в однобайтовом формате (ANSI), если же кодировавшаяся строка была в формате UTF-16, необходимо установить этот параметр в единицу, система возвратит строку UTF-16. По содержимому декодированной строки невозможно понять, ANSI это строка или UTF-16, так как она не имеет BOM заголовка или какой-либо другой служебной информации, поэтому, то в каком из двух форматов нужно вернуть декодированную строку, остается на совести разработчика. Не все способы декодирования принимают этот аргумент во внимание.
  • <Параметры декодирования (STRING)> - (необязательный аргумент) Текстовая строка, задающая дополнительные параметры при декодировании и способ форматирования результирующей строки. Строка имеет формат <Параметр 1>:<Значение>,<Параметр 2>:<Значение>. Возможные параметры зависят от способа декодирования.

Возвращаемое значение

Результат будет возвращен в ANSI или UTF-16 в зависимости от значения третьего аргумента.

Примеры

Message(DecodeString("A%d%b%T%W%d%\%R%N!B!@:!@+!@9!@:!","Internal",1));
//Будет выведено: "Проверка, test"

Message(DecodeString("HwRABD4EMgQ1BEAEOgQwBCwAIAB0AGUAcwB0AA==","Base64",1));
//Будет выведено: "Проверка, test"

Message(DecodeString("_:_\_Z_N_Q_\_V_LNB@:@+@9@:","Internal"));
//Для системной кодировки 1251, будет выведено: "Проверка, test"

Message(DecodeString("z/Du4uXw6uAsIHRlc3Q=","Base64"));
//Для системной кодировки 1251, будет выведено: "Проверка, test"