Re:Base64 embaralhando nome com acento

1 resposta
peczenyj

Codificação base64 leva em conta grupos de 6 bits da informação. Se vc tem 3 bytes de 8 bits vc tem 3 * 8 = 24 bits que equivale a 4 grupos de 6 bits, gerando 4 caracteres + um sinal de = para fazer trailer.

Se um ç está atrapalhando isso parece ter haver com a codificação da string original. provavelmente o ç ocupa 2 ou 4 bytes (se for utf16 ou uft32) e isso pode atrapalhar alguma etapa do teu processo. Fique atento à codificação das Strings.

1 Resposta

I

Bom dia,

Tenho esse pedaço de codigo, no qual tem a função de tranformar de byte para string um nome que busco de um servidor LDAP. o problema é, quando existe um nome com caracter especial (ç,~,´.^. `) ou qualquer outra variação, ele transforma esse nome pra mim em algo do tipo CSdsafsdfjHAJHJcçlkJLJKCLKlhcJKHckl e salva no banco, quando o nome não tem acento ou ç ele pega corretamente. Andei dando uma pesquisada e verifiquei que nesse teste Base64.isLDIFSafe(value) ele pergunta se o caracter é printavel ou legivel, caso não seja ele usa o Base64.encode e é aqui que ele embaralha o nome.

Pergunta* Alguem sabe alguma solução para o caso?

if (values != null) {
            while (values.hasMoreElements()) {
                String value = (String) values.nextElement();
                if (!Base64.isLDIFSafe(value)) {
                    // base64 encode and then print out
                    value = Base64.encode(value.getBytes());
                }
                if (LDAP_PROFILES_ATTRIBUTE.equals(attributeName)) {
                    getGecoProfileFromValue(value);
                } else if (LDAP_EMAIL_ATTRIBUTE.equals(attributeName)) {
                    this.email = value;
                } else if (LDAP_NAME_ATTRIBUTE.equals(attributeName)) {
                    this.name = value;
                }

            }
Criado 16 de outubro de 2007
Ultima resposta 16 de out. de 2007
Respostas 1
Participantes 2