Функции кодирования и декодирования
В данном разделе при описании функций приняты следующие обозначения:
|
Функции декодирования
decode_base16
Декодирует value
(строку в формате Base16) в исходную строку.
Спецификация функции
decode_base16(value: <строка>) :: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Данные в формате Base16 для декодирования. |
да |
Ошибки
Функция decode_base16
возвращает ошибку, для которой требуется обработка, если value
не является корректной закодированной строкой в формате Base16.
Пример
Декодирование данных в формате Base16
decode_base16!("796f752068617665207375636365737366756c6c79206465636f646564206d65")
"you have successfully decoded me"
decode_base64
Декодирует value
(строка в формате Base64) в исходную строку.
Спецификация функции
decode_base64(value: <строка>, [charset: <строка>]) :: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Данные в формате Base64 для декодирования. |
да |
|
|
строка |
Набор символов, используемый при декодировании данных:
|
|
нет |
Ошибки
Функция decode_base64
возвращает ошибку, для которой требуется обработка, если value
не является корректной закодированной строкой в формате Base64.
Примеры
Декодирование данных в формате Base64 (по умолчанию)
decode_base64!("eW91IGhhdmUgc3VjY2Vzc2Z1bGx5IGRlY29kZWQgbWU=")
"you can't make your heart feel something it won't"
Декодирование данных в измененном формате Base64 для URL
decode_base64!("eW91IGNhbid0IG1ha2UgeW91ciBoZWFydCBmZWVsIHNvbWV0aGluZyBpdCB3b24ndA==", charset: "url_safe")
"you can't make your heart feel something it won't"
decode_charset
Преобразует строку, закодированную не в UTF-8, в строку UTF-8, используя заданную кодировку.
Спецификация функции
decode_charset(value: <строка>, from_charset: <строка>)
:: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка не в UTF-8, которую нужно декодировать. |
да |
|
|
строка |
Набор символов, используемый для декодирования. Допустимые значения см. в списке. |
да |
Ошибки
Функция decode_charset
возвращает ошибку, для которой требуется обработка, если from_charset
не является корректным названием кодировки.
Примеры
Декодирование строки в кодировке EUC-KR
decode_charset!(decode_base64!("vsiz58fPvLy/5A=="), "euc-kr")
"안녕하세요"
Декодирование строки в кодировке EUC-JP
decode_charset!(decode_base64!("pLOk86TLpMGkzw=="), "euc-jp")
"こんにちは"
Декодирование строки в кодировке GB2312
decode_charset!(decode_base64!("xOO6ww=="), "gb2312")
"你好"
decode_gzip
Декодирует value
(строка в формате Gzip) в исходную строку.
Спецификация функции
decode_gzip(value: <строка>)
:: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Данные в формате Gzip для декодирования. |
да |
Ошибки
Функция decode_gzip
возвращает ошибку, для которой требуется обработка, если value
не является корректной строкой, закодированной в формате Gzip.
Пример
Декодирование данных в формате Gzip
encoded_text = decode_base64!("H4sIAHEAymMAA6vML1XISCxLVSguTU5OLS5OK83JqVRISU3OT0lNUchNBQD7BGDaIAAAAA==")
decode_gzip!(encoded_text)
you have successfully decoded me
rv_decode_lz4
Декодирует value
как запись, сжатую с помощью алгоритма LZ4.
Спецификация функции
rv_decode_lz4(value: <строка>)
:: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Запись, сжатая алгоритмом LZ4. |
да |
Ошибки
Функция rv_decode_lz4
возвращает ошибку, для которой требуется обработка, если не удается декодировать запись как LZ4.
Пример
rv_decode_lz4!(decode_base64!("CQAAAJBlbmNvZGVfbWU="))
"encode_me"
decode_mime_q
Заменяет подстроки value
, закодированные в кодировке q или base64, на исходные строки.
Спецификация функции
decode_mime_q(value: <строка>) :: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Закодированная строка с кодировочным словом для декодирования. |
да |
Ошибки
Функция decode_mime_q
может возвращать ошибки, для которых требуется обработка:
-
value
содержит некорректную закодированную строку с кодировочными словами.
Примеры
Декодирование одиночной с кодировочными словами
decode_mime_q!("=?utf-8?b?SGVsbG8sIFdvcmxkIQ==?=")
"Hello, World!"
Встроенная
decode_mime_q!("From: =?utf-8?b?SGVsbG8sIFdvcmxkIQ==?= <=?utf-8?q?hello=5Fworld=40example=2ecom?=>")
"From: Hello, World! <hello_world@example.com>"
Без указания набора символов
decode_mime_q!("?b?SGVsbG8sIFdvcmxkIQ==")
"Hello, World!"
decode_percent
Декодирует строку value
, закодированную в формате percent, как URL.
Спецификация функции
decode_percent(value: <строка>) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка для декодирования. |
да |
Пример
Декодирование строки в процентном кодировании
decode_percent("foo%20bar%3F")
"foo bar?"
decode_punycode
Декодирует строку value
, закодированную в формате punycode, как IDN (интернационализированное доменное имя).
Спецификация функции
decode_punycode(value: <строка>, [validate: <логическое значение>]) :: <строка>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка для декодирования. |
да |
|
|
логическое значение |
Если |
|
нет |
Ошибки
Функция decode_punycode
возвращает ошибку, для которой требуется обработка, если value
не является корректной строкой punycode.
Примеры
Декодирование интернационализированного доменного имени, закодированного в punycode
decode_punycode!("xn--e1afmkfd.xn--80akhbyknj4f")
"пример.испытание"
Декодирование строки из символов ASCII
decode_punycode!("example.com")
"example.com"
Декодирование без валидации
decode_punycode!("xn--8hbb.xn--fiba.xn--8hbf.xn--eib.", validate: false)
"١٠.٦٦.٣٠.٥."
decode_snappy
Декодирует value
, представленное в формате Snappy, в исходную строку.
Спецификация функции
decode_snappy(value: <строка>)
:: <строка>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Данные Snappy для декодирования. |
да |
Ошибки
Функция decode_snappy
возвращает ошибку, для которой требуется обработка, если value
не является корректной строкой, закодированной в формате Snappy.
Пример
encoded_text = decode_base64!("G2hBIHVzZXIgYWNjb3VudCB3YXMgY3JlYXRlZC4=")
decode_snappy!(encoded_text)
"A user account was created."
decode_zlib
Декодирует value
(строка в формате Zlib) в исходную строку.
Спецификация функции
decode_zlib(value: <строка>) :: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Данные в формате Zlib для декодирования. |
да |
Ошибки
Функция decode_zlib
возвращает ошибку, для которой требуется обработка, если value
не является корректной закодированной строкой в формате Zlib.
Пример
Декодирование данных в формате Zlib
encoded_text = decode_base64!("eJwNy4ENwCAIBMCNXIlQ/KqplUSgCdvXAS41qPMHshCB2R1zJlWIVlR6UURX2+wx2YcuK3kAb9C1wd6dn7Fa+QH9gRxr")
decode_zlib!(encoded_text)
"you have successfully decoded me"
decode_zstd
Декодирует value
(строка в формате Zstandard) в исходную строку.
Спецификация функции
decode_zstd(value: <строка>) :: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Данные в формате Zstandard для декодирования. |
да |
Ошибки
Функция decode_zstd
возвращает ошибку, для которой требуется обработка, если value
не является корректной закодированной строкой в формате Zstd.
Пример
Декодирование данных в формате Zstd
encoded_text = decode_base64!("KLUv/QBY/QEAYsQOFKClbQBedqXsb96EWDax/f/F/z+gNU4ZTInaUeAj82KqPFjUzKqhcfDqAIsLvAsnY1bI/N2mHzDixRQA")
decode_zstd!(encoded_text)
"you have successfully decoded me"
Функции кодирования
encode_base16
Кодирует value
в Base16.
Спецификация функции
encode_base16(value: <строка>) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка, которую необходимо закодировать. |
да |
Пример
Кодирование в Base16
encode_base16("please encode me")
"706c6561736520656e636f6465206d65"
encode_base64
Кодирует value
в Base64.
Спецификация функции
encode_base64(value: <строка>, [padding: <логическое значение>, charset: <строка>]) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка, которую необходимо закодировать. |
да |
|
|
логическое значение |
Дополняется ли вывод Base64. |
|
нет |
|
строка |
Набор символов, используемый при кодировании данных:
|
|
нет |
Примеры
Кодирование в Base64 (по умолчанию)
encode_base64("please encode me")
"cGxlYXNlIGVuY29kZSBtZQ=="
Кодирование в Base64 (без дополнения)
encode_base64("please encode me, no padding though", padding: false)
"cGxlYXNlIGVuY29kZSBtZSwgbm8gcGFkZGluZyB0aG91Z2g"
Кодирование в измененный Base64 для URL
encode_base64("please encode me, but safe for URLs", charset: "url_safe")
"cGxlYXNlIGVuY29kZSBtZSwgYnV0IHNhZmUgZm9yIFVSTHM="
encode_charset
Преобразует строку, закодированную в UTF-8, в строку заданной кодировки.
Спецификация функции
encode_charset(value: <строка>, to_charset: <строка>)
:: <строка> , <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка в UTF-8, которую нужно кодировать. |
да |
|
|
строка |
Набор символов, используемый для кодирования. Допустимые значения см. в списке. |
да |
Ошибки
Функция encode_charset
возвращает ошибку, для которой требуется обработка, если to_charset
не является корректным названием кодировки.
Примеры
Кодирование строки UTF-8 в EUC-KR
encode_base64(encode_charset!("안녕하세요", "euc-kr"))
"vsiz58fPvLy/5A=="
Кодирование строки UTF8 в EUC-JP
encode_base64(encode_charset!("こんにちは", "euc-jp"))
"pLOk86TLpMGkzw=="
Кодирование строки UTF-8 в GB2312
encode_base64(encode_charset!("你好", "gb2312"))
"xOO6ww=="
encode_gzip
Кодирует value
в формат Gzip.
Спецификация функции
encode_gzip(value: <строка>, [compression_level: <целое число>]) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка, которую необходимо закодировать. |
да |
|
|
целое значение |
Уровень сжатия по умолчанию. |
|
нет |
Примеры
Кодирование в Gzip
encoded_text = encode_gzip("please encode me")
encode_base64(encoded_text)
"H4sIAAAAAAAA/yvISU0sTlVIzUvOT0lVyE0FAI4R4vcQAAAA"
encode_percent
Преобразует value
в формат с использованием процентного кодирования для безопасного использования с URL.
Спецификация функции
encode_percent(value: <строка>, [ascii_set: <строка>]) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка, которую необходимо преобразовать. |
да |
|
|
строка |
Набор символов ASCII, используемый при преобразовании данных. |
|
нет |
Примеры
Процентное кодирование всех символов, не являющихся буквенно-цифровыми (по умолчанию)
encode_percent("foo bar?")
"foo%20bar%3F"
Процентное кодирование только управляющих символов
encode_percent("foo bar", ascii_set: "CONTROLS")
"foo %09bar"
encode_proto
Кодирует value
в payload — полезную нагрузку Protocol Buffers.
Спецификация функции
encode_proto(value: <объект>, desc_file: <строка>, message_type: <строка>) :: <строка>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Объект для преобразования в payload Protocol Buffers. |
да |
|
|
строка |
Путь к файлу набора дескрипторов Protocol Buffers. Должен быть строковым литерал.
Этот файл является результатом работы команды |
да |
|
|
строка |
Имя типа сообщения, используемого для сериализации. Должно быть строковым литералом. |
да |
Ошибки
Функция encode_proto
может возвращать ошибки, для которых требуется обработка:
-
Файл, указанный в аргументе
desc_file
, не существует. -
Тип сообщения, указанный в аргументе
message_type
, отсутствует в файле дескрипторов.
Пример
.payload = encode_base64(encode_proto!({"name": "someone", "phones": [{"number": "123456"}]}, "resources/protobuf_descriptor_set.desc", "test_protobuf.Person"))
"Cgdzb21lb25lIggKBjEyMzQ1Ng=="
encode_punycode
Кодирует значение
в формат punycode. Полезно для IDN.
Спецификация функции
encode_punycode(value: <строка>, [validate: <логическое значение>]) :: <строка>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка для кодирования. |
да |
|
|
логическое значение |
Проверять ли, что входная строка является валидным именем домена. |
|
нет |
Ошибки
Функция encode_punycode
возвращает ошибку, для которой требуется обработка, если value
нельзя закодировать в punycode.
Примеры
Кодирование интернационализированного доменного имени
encode_punycode!("пример.испытание")
"xn--e1afmkfd.xn--80akhbyknj4f"
Кодирование интернационализированного доменного имени в смешанном регистре
encode_punycode!("пРИМер.испытание")
"xn--e1afmkfd.xn--80akhbyknj4f"
Кодирование строки из символов ASCII
encode_punycode!("example.com")
"example.com"
Кодирование без валидации
encode_punycode!("xn--8hbb.xn--fiba.xn--8hbf.xn--eib.", validate: false)
"xn--8hbb.xn--fiba.xn--8hbf.xn--eib."
Кодирование доменного имени в смешанном регистре без валидации
encode_punycode!("www.CAFé.example")
"www.xn--caf-dma.example"
encode_snappy
Кодирует value
в формат Snappy.
Спецификация функции
encode_snappy(value: <строка>) :: <строка>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка для кодирования. |
да |
Ошибки
Функция encode_snappy
возвращает ошибку, для которой требуется обработка, если value
нельзя закодировать в формат Snappy.
Пример
encoded_text = encode_snappy!("A user account was created.")
encode_base64(encoded_text)
"G2hBIHVzZXIgYWNjb3VudCB3YXMgY3JlYXRlZC4="
encode_zlib
Кодирует value
в формат Zlib.
Спецификация функции
encode_zlib(value: <строка>, [compression_level: <целое число>]) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка, которую необходимо закодировать. |
да |
|
|
целое число |
Уровень сжатия по умолчанию. |
|
нет |
Пример
Кодирование в формат Zlib
encoded_text = encode_zlib("please encode me")
encode_base64(encoded_text)
"eJwryElNLE5VSM1Lzk9JVchNBQA0RQX7"
encode_zstd
Кодирует value
в формат Zstandard.
Спецификация функции
encode_zstd(value: <строка>, [compression_level: <целое число>]) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
строка |
Строка, которую необходимо закодировать. |
да |
|
|
целое число |
Уровень сжатия по умолчанию. |
|
нет |
Пример
Кодирование в формат Zstandard
encoded_text = encode_zstd("please encode me")
encode_base64(encoded_text)
"KLUv/QBYgQAAcGxlYXNlIGVuY29kZSBtZQ=="
Функции сериализации
encode_json
Кодирует value
в JSON.
Спецификация функции
encode_json(value: <любой тип>) :: <строка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
любое |
Значение, которое необходимо преобразовать в JSON-строку. |
да |
Пример
Кодирование в JSON
.payload = encode_json({"hello": "world"})
"{"hello":"world"}"
encode_key_value
Кодирует value
в формат "ключ — значение" с настраиваемыми разделителями. По умолчанию используются разделители, соответствующие формату logfmt.
Спецификация функции
encode_key_value(value: <объект>, [fields_ordering: <массив>, key_value_delimiter: <строка>, field_delimiter: <строка>, flatten_boolean: <логическое значение>]) :: <строка>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Значение, которое необходимо преобразовать в строку. |
да |
|
|
массив |
Упорядочивание полей для сохранения порядка. Любые поля, отсутствующие в этом списке, будут отображаться неупорядоченными, после всех упорядоченных полей. |
нет |
|
|
строка |
Строка, разделяющая ключ и значение. |
|
нет |
|
строка |
Строка, разделяющая каждую пару "ключ — значение". |
(пробел) |
нет |
|
логическое значение |
Указывает, следует ли кодировать "ключ — значение" с логическим значением как отдельный ключ. |
|
нет |
Ошибки
Функция encode_key_value
возвращает ошибку, для которой требуется обработка, если в fields_ordering
содержится элемент, не являющийся строкой.
Если fields_ordering
не указан, функция не возвращает ошибок.
Примеры
Кодирование с разделителями по умолчанию, без упорядочивания полей
encode_key_value({"ts": "2021-06-05T17:20:00Z", "msg": "This is a message", "lvl": "info"})
"lvl=info msg=\"This is a message\" ts=2021-06-05T17:20:00Z"
Кодирование с разделителями по умолчанию и упорядочиванием полей
encode_key_value!({"ts": "2021-06-05T17:20:00Z", "msg": "This is a message", "lvl": "info", "log_id": 12345}, ["ts", "lvl", "msg"])
"ts=2021-06-05T17:20:00Z lvl=info msg=\"This is a message\" log_id=12345"
Кодирование с разделителями по умолчанию (вложенные поля)
encode_key_value({"agent": {"name": "vector"}, "log": {"file": {"path": "my.log"}}, "event": "log"})
"agent.name=vector event=log log.file.path=my.log"
Кодирование с разделителями по умолчанию (вложенные поля с упорядочиванием)
encode_key_value!({"agent": {"name": "vector"}, "log": {"file": {"path": "my.log"}}, "event": "log"}, ["event", "log.file.path", "agent.name"])
"event=log log.file.path=my.log agent.name=vector"
Кодирование с пользовательскими разделителями, без упорядочивания полей
encode_key_value(
{"ts": "2021-06-05T17:20:00Z", "msg": "This is a message", "lvl": "info"},
field_delimiter: ",",
key_value_delimiter: ":"
)
"lvl:info,msg:\"This is a message\",ts:2021-06-05T17:20:00Z"
Кодирование с пользовательскими разделителями и сглаживанием логических значений
encode_key_value(
{"ts": "2021-06-05T17:20:00Z", "msg": "This is a message", "lvl": "info", "beta": true, "dropped": false},
field_delimiter: ",",
key_value_delimiter: ":",
flatten_boolean: true
)
"beta,lvl:info,msg:\"This is a message\",ts:2021-06-05T17:20:00Z"
encode_logfmt
Кодирует value
в формат logfmt.
Спецификация функции
encode_logfmt(value: <объект>, [fields_ordering: <массив>]) :: <строка>, <ошибка>
Аргумент | Тип | Описание | По умолчанию | Обязателен |
---|---|---|---|---|
|
объект |
Значение, которое необходимо преобразовать в строку в формате logfmt. |
да |
|
|
массив |
Упорядочивание полей для сохранения порядка. Любые поля, отсутствующие в этом списке, будут отображаться неупорядоченными, после всех упорядоченных полей. |
нет |
Ошибки
Функция encode_logfmt
возвращает ошибку, для которой требуется обработка, если в fields_ordering
содержится элемент, не являющийся строкой.
Если fields_ordering
не указан, функция не возвращает ошибок.
Примеры
Кодирование в формат logfmt без упорядочивания полей
encode_logfmt({"ts": "2021-06-05T17:20:00Z", "msg": "This is a message", "lvl": "info"})
"lvl=info msg=\"This is a message\" ts=2021-06-05T17:20:00Z"
Кодирование в формат logfmt с упорядочиванием полей
encode_logfmt!({"ts": "2021-06-05T17:20:00Z", "msg": "This is a message", "lvl": "info", "log_id": 12345}, ["ts", "lvl", "msg"])
"ts=2021-06-05T17:20:00Z lvl=info msg=\"This is a message\" log_id=12345"
Кодирование в формат logfmt (вложенные поля)
encode_logfmt({"agent": {"name": "vector"}, "log": {"file": {"path": "my.log"}}, "event": "log"})
"agent.name=vector event=log log.file.path=my.log"
Кодирование в формат logfmt (вложенные поля с упорядочиванием)
encode_logfmt!({"agent": {"name": "vector"}, "log": {"file": {"path": "my.log"}}, "event": "log"}, ["event", "log.file.path", "agent.name"])
"event=log log.file.path=my.log agent.name=vector"