zig*_*ggy 4 java string oracle encoding character-encoding
我有一个字符串,我想将其保存在仅支持 UTF8 字符的数据库中。如果字符串大小 > 60 个字符,我想截断它并只存储前 60 个字符。使用中的 Oracle 数据库仅支持 UTF-8 字符。
String.substring(0,59)
在 Java 中使用返回 60 个字符,但是当我将它保存在数据库中时,它被拒绝,因为数据库声称该字符串 > 60 个字符。
有没有办法找出特定字符串是否包含非 UTF8 字符。我发现的一种选择是:
try {
bytes = returnString.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
// Do something
Run Code Online (Sandbox Code Playgroud)
}
有没有办法可以将它截断为正好 x 个字符(数据丢失不是问题),并确保在数据库中保存时只保存 x 个字符。例如,如果我有字符串§8§8§8§8§8§8§8
,我说截断并只保存 5 个字符,它应该只保存§8§
据我了解,您希望以String
编码UTF-8
表示不超过 60 字节的方式限制长度。你可以这样做:
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1034 次 |
最近记录: |