in geronimo-mail_2.1_spec/src/main/java/jakarta/mail/internet/InternetAddress.java [601:664]
public static String toUnicodeString(Address[] addresses, int used) {
if (addresses == null || addresses.length == 0) {
return null;
}
boolean sawNonAsciiCharacters = false;
if (addresses.length == 1) {
String converted = ((InternetAddress)addresses[0]).toUnicodeString();
if (MimeUtility.verifyAscii(converted) != MimeUtility.ALL_ASCII){
sawNonAsciiCharacters = true;
converted = new String(converted.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
if (used + converted.length() > 72) {
converted = "\r\n " + converted;
}
if(sawNonAsciiCharacters){
return new String(converted.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
}
return converted;
} else {
final StringBuffer buf = new StringBuffer(addresses.length * 32);
for (int i = 0; i < addresses.length; i++) {
String converted = ((InternetAddress)addresses[0]).toUnicodeString();
if (MimeUtility.verifyAscii(converted) != MimeUtility.ALL_ASCII){
sawNonAsciiCharacters = true;
converted = new String(converted.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
if (i == 0) {
if (used + converted.length() + 1 > 72) {
buf.append("\r\n ");
used = 2;
}
} else {
if (used + converted.length() + 1 > 72) {
buf.append(",\r\n ");
used = 2;
} else {
buf.append(", ");
used += 2;
}
}
buf.append(converted);
used += converted.length();
}
String finalString = buf.toString();
if(sawNonAsciiCharacters){
return new String(finalString.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
}
return finalString;
}
}