检查数据库中的字符串是否是用Java编写的utf-8编码

时间:2015-11-11 05:19:23

标签: java string encoding utf-8

现在已经2天了,我一直在寻找方法来检查数据库中的值是否是用Java编码的utf-8编码。到目前为止,我已经读过Java中的字符串使用的是unicode(utf-16)编码。我已尝试按照herehere的建议回答,但似乎都没有正常工作。第一个总是返回false,而第二个总是返回true。

我尝试检查的字符串示例如下,其中除最后一个字符串以外的所有字符串都是utf8编码的:

  

ABCDEF,片假名,カタカナ和 K { ` F b N G [

我一直在尝试的一个想法是使用utf-8编码获取字符串的字节,然后使用默认编码获取字符串的字节,然后比较如下:

byte[] utf8byte = str.getBytes("UTF-8");
byte[] bytes = str.getBytes();
if(utf8byte.length == bytes.length) {
   return true;
}

但是根据这个逻辑,只有第一个字符串会返回true。根据我的理解,这是因为并非所有字符都只使用1个字节。

那么,您可以建议检查数据库中的字符串是否为utf-8编码的最佳方法是什么?我真的很感激任何想法。谢谢你提前。

1 个答案:

答案 0 :(得分:3)

你做不到。

Java数据库驱动程序从数据库中读取编码的字节字符串并将其转换为Java字符串。数据库可以选择将字符串发送为UTF-8,UTF-16或驱动程序可以理解的任何其他编码。

一旦它是Java字符串,它就不再包含任何原始编码的痕迹。 getBytes()将使用您的系统字符编码来解码字符串。它与数据库编码无关。

是的,Java使用UTF-16,但它无关紧要。