Difference between revisions of "EncodeString"

From SunFlurry wiki
Jump to: navigation, search
 
m (1 revision imported)
 
(2 intermediate revisions by 2 users not shown)
Line 13: Line 13:
 
Производит кодирование строки в указанный формат (к примеру, "Base64" или "UUE"). Могут кодироваться как ANSI, так и Unicode строки, информация также может получаться из буфера.  
 
Производит кодирование строки в указанный формат (к примеру, "Base64" или "UUE"). Могут кодироваться как ANSI, так и Unicode строки, информация также может получаться из буфера.  
  
При экспортировании строк, содержащих не ASCII символы, иногда бывает необходимо закодировать их в формат, содержащий только ASCII, форматов кодирования может быть множество. Сама система использует форматы ''INTERNAL'', ''INTERNAL2'' и ''INTERNAL3''.
+
При экспортировании строк, содержащих не ASCII символы, иногда бывает необходимо закодировать их в формат, содержащий только ASCII, форматов кодирования может быть множество. Сама система использует форматы ''INTERNAL'', ''INTERNAL2'' и ''INTERNAL3'' для собственных нужд, здесь они представлены для удобства.
  
 
== Синтаксис ==
 
== Синтаксис ==
Line 28: Line 28:
 
** '''QP''', '''Quoted-printable''': {{Planned}} кодирование в формате ''Quoted-printable''. Используется при кодировании сообщений электронной почты. Изменяет только однобайтовые символы с кодом >127 и с кодами <33, в некоторых случаях оставляя символы пробела (" ") и табуляции (chr(9)). Результатом работы будет строка, содержащая символы chr(9)," ".."~".
 
** '''QP''', '''Quoted-printable''': {{Planned}} кодирование в формате ''Quoted-printable''. Используется при кодировании сообщений электронной почты. Изменяет только однобайтовые символы с кодом >127 и с кодами <33, в некоторых случаях оставляя символы пробела (" ") и табуляции (chr(9)). Результатом работы будет строка, содержащая символы chr(9)," ".."~".
 
** '''Ascii85''': {{Planned}} Используется для кодирования Adobe PostScript и элементов файлов PDF. Результатом работы будет строка, содержащая символы "!".."u".
 
** '''Ascii85''': {{Planned}} Используется для кодирования Adobe PostScript и элементов файлов PDF. Результатом работы будет строка, содержащая символы "!".."u".
** '''PE''', '''Percent-encoding''', '''URL encoding''': Используется для кодирования URL. Кодирует любые символы с кодами >127, а также <33 и следующие символы: "!", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "/", ":", ";", "=", "?", "@", "[", "]", в режимах 0 или 1 также кодирует дополнительно ".", "-", "<", ">", "~", "^", "`", "\", "{", "}", "|", "_" и Chr(127). Режим задается в параметрах кодирования в виде <code>MODE:<Режим></code> и может принимать значения:
+
** '''PE''', '''Percent-encoding''', '''URL encoding''': Используется для кодирования URL. Кодирует любые символы с кодами >127, а также <33 и следующие символы: "!", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "/", ":", ";", "=", "?", "@", "[", "]", в режимах 0 или 1 также кодирует дополнительно ".", "-", "<", ">", "~", "^", "`", "\", "{", "}", "|", "_" и Chr(127). Если входящая строка для кодирования представлена в UTF-16, она сначала будет перекодирована в UTF-8. Режим задается в параметрах кодирования в виде <code>MODE:<Режим></code> и может принимать значения:
 
*** '''0''' (по умолчанию) -- Кодировать также дополнительные символы
 
*** '''0''' (по умолчанию) -- Кодировать также дополнительные символы
 
*** '''1''' -- Кодировать также дополнительные символы, кодировать пробел как "+"
 
*** '''1''' -- Кодировать также дополнительные символы, кодировать пробел как "+"
Line 37: Line 37:
 
*** '''1''' -- кодирование доменных имен (каждое доменное имя из строки <code><домен1>.<домен2>...</code> кодируется отдельно, добавляется префикс <code>xn--</code>). К примеру, <code>москва.рф</code> кодируется в <code>xn--80adxhks.xn--p1ai</code>.
 
*** '''1''' -- кодирование доменных имен (каждое доменное имя из строки <code><домен1>.<домен2>...</code> кодируется отдельно, добавляется префикс <code>xn--</code>). К примеру, <code>москва.рф</code> кодируется в <code>xn--80adxhks.xn--p1ai</code>.
 
** '''UUE''', '''Uuencoding''': {{Planned}} Может использоваться при кодировании бинарных файлов в некоторых системах. Результатом работы будет строка, содержащая символы " ".."_".
 
** '''UUE''', '''Uuencoding''': {{Planned}} Может использоваться при кодировании бинарных файлов в некоторых системах. Результатом работы будет строка, содержащая символы " ".."_".
 +
** '''JSON''': Используется для кодирования строк, добавляемых в документы JSON (RFC 8259, escaping). Кодирует только символы с кодами 0..31, 34 и 92. Режим задается в параметрах кодирования в виде <code>MODE:<Режим></code> и может принимать значения:
 +
*** '''0''' (по умолчанию) -- символы с кодами 34 ("), 92 (\), 47 (/), 8 (забой), 9 (табуляция), 10 (перевод строки), 12 (разрыв строки), 13 (возврат каретки) будут перекодированы в комбинации <code>\"</code>, <code>\\</code>, <code>\/</code>, <code>\b</code>, <code>\t</code>, <code>\n</code>, <code>\f</code> и <code>\r</code> соответственно, остальные символы, подлежащие кодированию, будут превращены в комбинации <code>\u????</code>, где ''????'' шестнадцатеричный код символа.
 +
*** '''1''' -- Все символы, подлежащие кодированию, будут превращены в комбинации <code>\u????</code>, где ''????'' шестнадцатеричный код символа.
 
* <code>''<Параметры кодирования (STRING)>''</code> - {{Optional}} Текстовая строка, задающая дополнительные параметры при кодировании и способ форматирования результирующей строки. Строка имеет формат <code><Параметр 1>:<Значение>,<Параметр 2>:<Значение></code>. Для всех форматов кодирования, функция принимает следующие параметры:
 
* <code>''<Параметры кодирования (STRING)>''</code> - {{Optional}} Текстовая строка, задающая дополнительные параметры при кодировании и способ форматирования результирующей строки. Строка имеет формат <code><Параметр 1>:<Значение>,<Параметр 2>:<Значение></code>. Для всех форматов кодирования, функция принимает следующие параметры:
 
** '''Indent:<Количество пробелов>''': {{Planned}} Задает необходимое количество пробелов идущих в начале каждой отформатированной строки. По умолчанию ноль.
 
** '''Indent:<Количество пробелов>''': {{Planned}} Задает необходимое количество пробелов идущих в начале каждой отформатированной строки. По умолчанию ноль.

Latest revision as of 12:07, 13 March 2022

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

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

При экспортировании строк, содержащих не ASCII символы, иногда бывает необходимо закодировать их в формат, содержащий только ASCII, форматов кодирования может быть множество. Сама система использует форматы INTERNAL, INTERNAL2 и INTERNAL3 для собственных нужд, здесь они представлены для удобства.

Синтаксис

EncodeString(<Строка или буфер (STRING,BUFFER)>,<Формат кодирования (STRING)>="INTERNAL",<Параметры кодирования (STRING)>):<Результат (STRING)>

Аргументы

  • <Строка или буфер (STRING,BUFFER)> - Аргумент, строковое представление которого необходимо закодировать. Если аргумент является буфером, кодируются его бинарные данные.
  • <Формат кодирования (STRING)> - (необязательный аргумент) Текстовый аргумент с наименованием способа кодирования. Возможны следующие значения:
    • Internal (по умолчанию): кодирование использует следующий алфавит: "!".."?","A".."^","a".."~". Система использует этот способ для кодирования внутрисистемных сообщений.
    • Internal2: кодирование использует следующий алфавит: "$".."?","A".."^","a".."~", по сравнению с Internal в результирующем тексте будут отсутствовать знаки @ и #. Система использует этот способ для кодирования некоторых элементов файлов формата SFG.
    • Internal3: кодирование использует следующий алфавит: "!".."?" (за исключением ","),"A".."^","a".."z", по сравнению с Internal в результирующем тексте будет отсутствовать знак ,. Система использует этот способ кодирования строк в функциях ObjectToString, ObjectToFile и др.
    • Base64: кодирования в формате Base64 получает на выходе строку, в которой содержатся только знаки: "A".."Z","a".."z","0".."9","+","/", строка завершается двумя или менее знаками "=". Используется для кодирования сообщений и бинарных файлов в сообщении электронной почты.
    • QP, Quoted-printable: (планируется к реализации) кодирование в формате Quoted-printable. Используется при кодировании сообщений электронной почты. Изменяет только однобайтовые символы с кодом >127 и с кодами <33, в некоторых случаях оставляя символы пробела (" ") и табуляции (chr(9)). Результатом работы будет строка, содержащая символы chr(9)," ".."~".
    • Ascii85: (планируется к реализации) Используется для кодирования Adobe PostScript и элементов файлов PDF. Результатом работы будет строка, содержащая символы "!".."u".
    • PE, Percent-encoding, URL encoding: Используется для кодирования URL. Кодирует любые символы с кодами >127, а также <33 и следующие символы: "!", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "/", ":", ";", "=", "?", "@", "[", "]", в режимах 0 или 1 также кодирует дополнительно ".", "-", "<", ">", "~", "^", "`", "\", "{", "}", "|", "_" и Chr(127). Если входящая строка для кодирования представлена в UTF-16, она сначала будет перекодирована в UTF-8. Режим задается в параметрах кодирования в виде MODE:<Режим> и может принимать значения:
      • 0 (по умолчанию) -- Кодировать также дополнительные символы
      • 1 -- Кодировать также дополнительные символы, кодировать пробел как "+"
      • 2 -- Кодировать только основные символы
      • 3 -- Кодировать только основные символы, кодировать пробел как "+"
    • PUNY, Punycode: Используется для кодирования части URL с доменным именем, когда имя содержит международные символы. К примеру москва.рф кодируется в xn--80adxhks.xn--p1ai. Результат будет содержать только символы с кодами <127, входящая строка может содержать любые символы, в т.ч. UTF-16 символы, состоящие из 4 байт (см. Строки). Размер строки для кодирования ограничен способом кодирования, при переполнении переменных кодировщика, будет возвращена пустая строка. Кодирование может происходить в двух режимах. Режим задается в параметрах кодирования в виде MODE:<Режим> и может принимать значения:
      • 0 (по умолчанию) -- кодирование произвольных строк (игнорируется доменная структура строки <домен1>.<домен2>..., не добавляется префикс xn--). К примеру, москва.рф кодируется в .-7sbf5ajmsd6a.
      • 1 -- кодирование доменных имен (каждое доменное имя из строки <домен1>.<домен2>... кодируется отдельно, добавляется префикс xn--). К примеру, москва.рф кодируется в xn--80adxhks.xn--p1ai.
    • UUE, Uuencoding: (планируется к реализации) Может использоваться при кодировании бинарных файлов в некоторых системах. Результатом работы будет строка, содержащая символы " ".."_".
    • JSON: Используется для кодирования строк, добавляемых в документы JSON (RFC 8259, escaping). Кодирует только символы с кодами 0..31, 34 и 92. Режим задается в параметрах кодирования в виде MODE:<Режим> и может принимать значения:
      • 0 (по умолчанию) -- символы с кодами 34 ("), 92 (\), 47 (/), 8 (забой), 9 (табуляция), 10 (перевод строки), 12 (разрыв строки), 13 (возврат каретки) будут перекодированы в комбинации \", \\, \/, \b, \t, \n, \f и \r соответственно, остальные символы, подлежащие кодированию, будут превращены в комбинации \u????, где ???? шестнадцатеричный код символа.
      • 1 -- Все символы, подлежащие кодированию, будут превращены в комбинации \u????, где ???? шестнадцатеричный код символа.
  • <Параметры кодирования (STRING)> - (необязательный аргумент) Текстовая строка, задающая дополнительные параметры при кодировании и способ форматирования результирующей строки. Строка имеет формат <Параметр 1>:<Значение>,<Параметр 2>:<Значение>. Для всех форматов кодирования, функция принимает следующие параметры:
    • Indent:<Количество пробелов>: (планируется к реализации) Задает необходимое количество пробелов идущих в начале каждой отформатированной строки. По умолчанию ноль.
    • Split:<Количество символов на строку>: (планируется к реализации) Задает количество символов, после которого в текст будет добавлен перевод строки. По умолчанию ноль (не делить текст на строки).

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

Результат будет возвращен в ANSI (если способ кодирования не подразумевает иного).

Примеры

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

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

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

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