为什么我的java字符串长度比从中生成的byte[]数组短?

为什么我的java字符串长度比从中生成的byte[]数组短?,java,mysql,blob,unicode-string,Java,Mysql,Blob,Unicode String,我正在使用JDBC从MySql数据库读取一个blob。我知道生成的字节数组很好,我已经通过HTTP将其作为每个字节的数字字符串文本发送,并成功下载了结果(jpg)。(只是为了证明mysql->Javaservlet数据是好的) 使用UTF-8从这个字节数组构造一个新字符串会产生一个长度比字节数组短的字符串,以及一些我无法破译的值。如果UTF-8每个字符至少有1个字节,那么生成的字符串不应该至少是其生成的字节数组的长度吗?(对于此特定示例,字节长度为12079474,结果字符串长度为1150184

我正在使用JDBC从MySql数据库读取一个blob。我知道生成的字节数组很好,我已经通过HTTP将其作为每个字节的数字字符串文本发送,并成功下载了结果(jpg)。(只是为了证明mysql->Javaservlet数据是好的)

使用UTF-8从这个字节数组构造一个新字符串会产生一个长度比字节数组短的字符串,以及一些我无法破译的值。如果UTF-8每个字符至少有1个字节,那么生成的字符串不应该至少是其生成的字节数组的长度吗?(对于此特定示例,字节长度为12079474,结果字符串长度为11501845)


谢谢你的时间

在您的字节中,有被解释为连续字节的数据,即在UTF-8中,它们具有特殊含义,并且从多个字节中形成一个Unicode字符。这就是字符串比字节数短的原因。

在字节中,数据被解释为连续字节,即在UTF-8中,它们具有特殊含义,并且从多个字节中形成一个Unicode字符。这就是字符串比字节数短的原因。

您与自己的陈述相矛盾。如果多个字节组成一个字符,那么字符长度会更小,对吗?另外,请看.jpg不是文本,它是二进制数据。将JPG图像的字节解释为字符串是没有意义的。如果需要二进制数据作为字符串,请考虑将每个字节转换成十六进制或类似的,以便进行双向操作哦,谢谢!你会把我推向正确的方向。我希望每个字节的字符串被解释为其unicode码点,而不是字节数组的字符串被解释为UTF-8文本。但是如果bye数组包含二进制数据,比如jpg图像,那么首先就不会有任何要提取的码点。你不能把二进制数据当作文本来对待,你只能把文本当作文本来对待。你在反驳你自己的说法。如果多个字节组成一个字符,那么字符长度会更小,对吗?另外,请看.jpg不是文本,它是二进制数据。将JPG图像的字节解释为字符串是没有意义的。如果需要二进制数据作为字符串,请考虑将每个字节转换成十六进制或类似的,以便进行双向操作哦,谢谢!你会把我推向正确的方向。我希望每个字节的字符串被解释为其unicode码点,而不是字节数组的字符串被解释为UTF-8文本。但是如果bye数组包含二进制数据,比如jpg图像,那么首先就不会有任何要提取的码点。不能将二进制数据视为文本,只能将文本视为文本。