gpt4 book ai didi

Java - 从混合了 UTF-8 和非 UTF-8 字符的字符串中准确计算 60 个字符

转载 作者:行者123 更新时间:2023-11-29 05:29:00 27 4
gpt4 key购买 nike

我有一个字符串,我想将其保存在只支持 UTF8 字符的数据库中。如果字符串大小大于 60 个字符,我想截断它并只存储前 60 个字符。使用的Oracle数据库只支持UTF-8字符。

在 Java 中使用 String.substring(0,59) 返回 60 个字符,但是当我将它保存在数据库中时,它被拒绝,因为数据库声称该字符串大于 60 个字符。

  • 有没有办法查明特定字符串是否包含非 UTF8 字符。我发现的一个选项是:

    尝试{

        bytes = returnString.getBytes("UTF-8");


    } catch (UnsupportedEncodingException e) {
    // Do something

  • 有没有一种方法可以将其截断为正好 x 个字符(数据丢失不是问题)并确保在数据库中保存时只保存 x 个字符。例如,如果我有字符串 §8§8§8§8§8§8§8 并且我说截断并只保存 5 个字符,它应该只保存 §8§

最佳答案

据我了解,您希望以编码的 UTF-8 表示形式不超过 60 个字节的方式限制 String 的长度。你可以这样做:

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

关于Java - 从混合了 UTF-8 和非 UTF-8 字符的字符串中准确计算 60 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764883/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com