Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Java - Zählen Sie genau 60 Zeichen aus einer Zeichenfolge mit einer Mischung aus UTF-8- und Nicht-UTF-8-Zeichen

Soweit ich verstehe, möchten Sie den String einschränken Länge so, dass der codierte UTF-8 Darstellung 60 Byte nicht überschreitet. Sie können dies folgendermaßen tun:

String s=…;
CharsetEncoder enc=StandardCharsets.UTF_8.newEncoder();
ByteBuffer bb=ByteBuffer.allocate(60);// note the limit
CharBuffer cb = CharBuffer.wrap(s);
CoderResult r = enc.encode(cb, bb, true);
if(r.isOverflow()) {
    System.out.println(s+" is too long for "
                      +bb.capacity()+" "+enc.charset()+" bytes");
    s=cb.flip().toString();
    System.out.println("truncated to "+s);
}