All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.util.EncodeUtil Maven / Gradle / Ivy

There is a newer version: 8.27.3
Show newest version
/*
 * Copyright (C) 2000-2024 Vaadin Ltd
 *
 * This program is available under Vaadin Commercial License and Service Terms.
 *
 * See  for the full
 * license.
 */
package com.vaadin.util;

import static java.nio.charset.StandardCharsets.UTF_8;

/**
 * Utilities related to various encoding schemes.
 *
 * @author Vaadin Ltd
 * @since 7.7.7
 */
public final class EncodeUtil {

    private EncodeUtil() {
        // Static utils only
    }

    /**
     * Encodes the given string to UTF-8 value-chars as defined in
     * RFC5987 for use in e.g. the Content-Disposition HTTP header.
     *
     * @param value
     *            the string to encode, not null
     * @return the encoded string
     */
    public static String rfc5987Encode(String value) {
        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < value.length();) {
            int cp = value.codePointAt(i);
            if (cp < 127 && (Character.isLetterOrDigit(cp) || cp == '.')) {
                builder.append((char) cp);
            } else {
                // Create string from a single code point
                String cpAsString = new String(new int[] { cp }, 0, 1);

                appendHexBytes(builder, cpAsString.getBytes(UTF_8));
            }

            // Advance to the next code point
            i += Character.charCount(cp);
        }

        return builder.toString();
    }

    private static void appendHexBytes(StringBuilder builder, byte[] bytes) {
        for (byte byteValue : bytes) {
            // mask with 0xFF to compensate for "negative" values
            int intValue = byteValue & 0xFF;
            String hexCode = Integer.toString(intValue, 16);
            builder.append('%').append(hexCode);
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy