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.
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;
}
}