Файлы и кодирование
Все 10 методов PK для Base64, адресов, системной кодировки, шестнадцатеричной записи, загрузки и сохранения файлов.
Объект PK предоставляет 10 методов для файлов и кодирования. Они меняют представление данных или передают байты через строку, но не шифруют содержимое и не защищают его от чтения.
Base64 и шестнадцатеричная запись не скрывают данные
Обе формы восстанавливаются без ключа. Используйте их для передачи байтов через текстовое поле. Для защиты данных нужен метод шифрования и отдельное безопасное хранение ключа.
Что выбрать
Обычный текст и Base64
PK.base64 и PK.decodeBase64 подходят для совместимых исторических полей. Для однозначного UTF-8 и выбора алфавита используйте PK.baseEncodeDecode.
Одно значение адреса
PK.urlEncode кодирует значение параметра, а PK.urlDecode выполняет одно обратное преобразование. Готовый адрес целиком обычно кодировать не нужно.
Загрузить удалённый файл
PK.fileToBase64 отправляет запрос GET по адресу и возвращает Base64 сырых байтов ответа. Локальный путь этот метод не читает.
Сохранить файл сеанса
PK.saveFile записывает текст UTF-8 или декодированные из Base64 байты. Путь, действие, тип и данные передаются одной строкой через |.
Текст, байты и их запись
Перед вызовом определите, что именно хранит строка. Это исключает частую ошибку, когда Base64 декодируют как текст, хотя внутри находится изображение или архив.
demo — четыре символа. Чтобы сохранить их как байты, сначала нужна кодировка символов: историческая системная или явно заданная UTF-8.
В UTF-8 текст demo представлен байтами 64 65 6D 6F в шестнадцатеричной записи.
Те же байты записываются как ZGVtbw==. Это печатная строка, из которой байты можно восстановить без потерь.
decodeBase64 и baseEncodeDecode после восстановления байтов пытаются вернуть текст. hexToBase64 сохраняет сами байты и меняет только их печатную форму.
Простая пара Base64
PK.base64(input)
Кодирует строку через историческое преобразование в системную кодировку Windows и возвращает обычную строку Base64 с заполнением =.
input: string — исходный текст.
string — Base64 байтов в системной кодировке.
Состояние проекта не меняется.
Для латиницы результат однозначен. Для кириллицы и других знаков он зависит от системной кодовой страницы, поэтому для новых обменных форматов предпочтительнее baseEncodeDecode с явным UTF-8. Исходная операция подробно описана в .
Значение внутри адреса
PK.urlEncode(input)
Преобразует одно строковое значение в процентную запись. Пробел становится %20; знаки =, &, ?, #, двоеточие и косая черта также кодируются.
input: string — одно значение, а не весь готовый адрес.
string — процентная запись значения.
Состояние проекта не меняется.
Не передавайте в метод строку https://example.com/a?x=1 целиком: служебные знаки адреса превратятся в данные. Точный набор преобразований показан в .
Исправить строку из системной кодировки
PK.ansiToUTF8(input)
Повторно преобразует строку через текущую системную кодовую страницу Windows. Метод нужен только для подтверждённого искажения, когда байты системной кодировки были прочитаны как другой текст.
input: string — уже отображаемая, но искажённая строка.
string — исправленный текст либо исходная строка, если надёжного результата нет.
Состояние проекта не меняется.
Результат зависит от кодовой страницы компьютера. Если преобразование даёт пустую строку или знак замены �, метод возвращает исходный текст, поэтому совпадение результата со входом не доказывает правильность исходной кодировки. Граница применения объяснена в .
Загрузить файл как Base64
PK.fileToBase64(input)
Отправляет запрос GET по переданному адресу через текущую прокси, загружает всё тело ответа в память и возвращает Base64 полученных байтов. Несмотря на старое описание параметра как пути, фактический метод работает с сетевым адресом, а не с локальным файлом.
input: string — полный адрес ответа, например https://example.com/image.png.
string — Base64 сырых байтов тела либо строка транспортной ошибки.
Выполняется отдельный запрос GET через текущую прокси; результат нужно брать из возвращённой строки.
Метод не обещает перенести свой внутренний ответ в PK.response, PK.headers или типизированные сетевые свойства, поэтому не используйте их как подтверждение этой загрузки. Он также не проверяет назначение тела: если сервер вернул страницу ошибки, её байты тоже могут стать корректной строкой Base64. Всё тело и увеличенная примерно на треть строка одновременно находятся в памяти, поэтому не применяйте метод к файлам неизвестного или неограниченного размера.
Транспортная ошибка может оставить вызов в бесконечных повторах
Исполнитель намерен ограничить число повторов, но не увеличивает внутренний счётчик. Пока транспортная ошибка сохраняется, он ждёт одну секунду и повторяет тот же запрос без фактического предела. Не используйте этот метод как проверку недоступного узла и не запускайте массовую обработку без заранее подтверждённого адреса и маршрута.
Сетевое поведение и расход памяти подробнее описаны в .
Между Base64 и шестнадцатеричной записью
PK.hexToBase64(input)
Читает каждые два шестнадцатеричных знака как один байт и возвращает Base64 этих байтов.
input: string — чётное число знаков 0–9, A–F или a–f.
string — Base64 либо текст ошибки.
Состояние проекта не меняется.
Нечётная длина возвращает Error: Invalid hex input: Length must be even. Исполнитель не убеждается, что преобразовал каждый знак, поэтому вход чётной длины с посторонним знаком способен дать правдоподобную, но неверную строку. Проверяйте алфавит на границе, где получаете внешние данные. Точная пара представлений приведена в .
Несколько алфавитов
PK.baseEncodeDecode(input)
Принимает строку JSON, кодирует поле message выбранным алфавитом или декодирует его и читает восстановленные байты как UTF-8. Передавайте объект через JSON.stringify, чтобы кавычки и обратные косые черты значения были оформлены однозначно.
input: string — строковое представление одного объекта с обязательными полями.
string — закодированная строка, текст UTF-8 после декодирования либо обычная строка ошибки с началом Error: .
Состояние проекта не меняется.
Поля и алгоритмы
Обязательная строка с точным регистром: Base16, Base32, Base64, Base58BitCoin, Base58Ripple, Base58Flickr, Base58Custom, Ascii85 или Z85.
Обязательная строка encode или decode в нижнем регистре.
Обязательная строка: исходный текст для кодирования или печатная строка для декодирования.
Необязательное логическое значение только для кодирования Base64. По умолчанию true; значение false удаляет конечные =.
Необязательная строка только для Base58Custom. Для обратимости обе стороны должны передать один и тот же допустимый алфавит из 58 уникальных знаков.
Имена полей, действий и алгоритмов чувствительны к регистру. Z85 принимает число исходных байтов, кратное четырём, а при декодировании — число знаков, кратное пяти. Ошибки возвращаются в том же строковом типе, что и успешный текст, поэтому произвольный результат, действительно начинающийся с Error: , неотличим от сообщения исполнителя. Не угадывайте успех по словам: проверяйте заранее известный формат или, как в примере выше, точное обратное преобразование.
Все алгоритмы, ограничения и поля подробно разобраны в .
Сохранить файл
PK.saveFile(input)
Сохраняет текст в UTF-8 или декодирует Base64 в байты. Относительный путь отсчитывается от каталога результатов текущего сеанса. Метод принимает одну строку с полями, разделёнными знаком |:
input: string — путь, действие, необязательный тип и данные в одной строке.
string — точное сообщение об успехе, проверке в студии или ошибке.
Создаётся или изменяется файл; недостающие каталоги также создаются.
Текстовый файл:
Двоичный файл из Base64:
В hello.bin попадут байты Hello!, а не знаки SGVsbG8h. Для типа text перевод строки не добавляется автоматически. Если данные содержат |, все части после служебных полей снова соединяются, поэтому знак сохраняется:
Данные дополнительно выполняются как in-Line
Путь, действие и тип остаются статическими частями строки, а поле данных проходит через исполнитель in-Line перед записью. Если произвольный внешний текст содержит запись функции in-Line, он может быть вычислен вместо буквального сохранения. Не используйте saveFile как прозрачную запись недоверенного необработанного содержимого без отдельного договора на допустимые данные.
Действия и результаты
Создаёт файл или полностью заменяет содержимое. Точный результат: File saved successfully.
Создаёт отсутствующий файл или дописывает точно в конец. Точный результат: Data appended successfully.
При совпадении имени создаёт _1, затем _2. Результат: File saved successfully as <имя>.
Названия действий и типов не зависят от регистра. В студии файл не создаётся: после проверки параметров метод возвращает Success (in studio you can't save files). Эта строка подтверждает только проверку в студии, а не запись на диск.
Путь должен быть фиксированным и доверенным
Относительный путь с .. не запрещён и способен выйти за каталог сеанса. Не составляйте имя файла из ответа сайта, входной строки или данных пользователя. Используйте заранее заданный относительный путь без ..; абсолютный путь с буквой диска допустим, но привязывает проект к одному компьютеру.
Полный договор действий, путей, студии и строк ошибок приведён в .