Я только что сделал это:
static String encodeRootId(final String value) {
try {
final BigInteger bigInteger = new BigInteger(value.getBytes("UTF-8"));
final String encoded = bigInteger.toString(Character.MAX_RADIX);
//must encode the sign as well
if (bigInteger.signum() < 0) {
return 'n' + encoded.substring(1);
} else {
return 'p' + encoded;
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("impossible");
}
}
трюк для преобразования байтов строки [] в большое int привел к недостатку необходимости вручную кодировать возможное - по общему признанию, не красивое, но быстрое решение.
Кроме того, в моем случае использования мне не нужно декодировать, и производительность не имеет значения.