【发布时间】:2014-03-12 23:01:51
【问题描述】:
我有一个字符串,我想将它保存在仅支持 UTF8 字符的数据库中。如果字符串大小大于 60 个字符,我想截断它并只存储前 60 个字符。使用中的 Oracle 数据库仅支持 UTF-8 字符。
在 Java 中使用 String.substring(0,59) 返回 60 个字符,但是当我将其保存在数据库中时,它会被拒绝,因为数据库声称该字符串大于 60 个字符。
-
有没有办法找出特定字符串是否包含非 UTF8 字符。我发现的一个选项是:
try {bytes = returnString.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { // Do something} 有没有办法可以将其截断为 x 个字符(数据丢失不是问题),并确保在数据库中保存时只保存 x 个字符。例如,如果我有字符串
§8§8§8§8§8§8§8并且我说截断并只保存 5 个字符,它应该只保存§8§
【问题讨论】:
-
"我有一个字符串,其中包含 UTF-8 和非 UTF-8 字符的混合。"没有这样的事情。 Java中的所有个字符都存储为UTF-16,每个有效字符都可以用UTF-8表示。非常不清楚您的实际意思。
-
好吧,这就是它们在 Java 中的表示方式,但是当我将字符串存储在 Oracle 中时,它不再是 UTF-16(如果 Oracle 中配置的字符集是 UTF-8)对吗?
-
但这并不意味着您的问题有任何意义。真的没有“UTF-8 字符”这样的东西。 UTF-8 是一种编码,仅此而已。
-
你应该决定是“70个字符”还是“60个字符”;两者都在您的问题中出现两次。我在回答中使用了
60…… -
@ziggy:例如,如果您的字符串仅包含代理对的一半。那将是一个 UTF-16 代码单元序列,实际上并不代表有效的 Unicode 字符序列。
标签: java string oracle encoding character-encoding