Каков наилучший способ преобразования произвольной строки Java в ограниченный набор символов и обратно?Как преобразовать произвольную строку Java в ограниченный набор символов обратимым образом?
Я хотел бы сгенерировать ETag из произвольной строки Java и затем воспроизвести исходную строку, когда будет представлен этот ETag.
RFC 7232 и RFC 7230 между ними определяют допустимые символы как:
etagc = %x21/%x23-7E/obs-text
; VCHAR except double quotes, plus obs-text
obs-text = %x80-FF
затягивая, это означает, что любой 8 бит символов больше или равно 0x21
, за исключением 0x22
и 0x7f
. Учитывая, что строки Java могут содержать любой символ Юникода, существует немало, которые недопустимы в ETag.
Упрощенно, потому что 0 - 9 и A - F все допустимые символы Etag, я мог бы:
- преобразовать строку в массив байтов UTF-8;
- затем преобразуйте каждый байт в двухзначный шестнадцатеричный номер;
- затем объедините шестнадцатеричные числа, чтобы сделать ETag.
Код для реверса это немного больно, но это является совершенно обратимым, и это работает для всех Java Strings.
Однако мой упрощенный метод производит очень длинные ETags, что является неэффективным и может вызвать проблемы на практике.
Как я могу изготовить более короткие ETags, используя тот факт, что для меня есть 220 символов? Есть ли библиотека для этой цели?
Вы ищете Base64. – SLaks
Base64. Поищи это. –
Ну ... Я ищу Base220 –