JSON String数据化平台独立

时间:2018-03-12 09:23:21

标签: java string character-encoding utf platform-independent

我想使用Java确定以字节为单位的JSON Java字符串的数据大小。 此计算应与平台无关,因为该软件用于不同的系统和(可能的)不同的默认字符编码(Windows,Linux,zOS,...)。 JSON应该只包含可以使用UTF-8编码的字符。到目前为止,在所有使用情况中,只有字符可以由1个字节编码,但是,将来,中文字符,例如, (U + 20F2E),也被使用。

是否有一种以强大的方式计算数据大小的最佳实践方法?

据我了解,json.getBytes("UTF-8").length似乎是一个有效的解决方案。

在Windows上测试输出:

这是一个1Byte UTF-8字符:

@
"@".length() -> 1
"@".getBytes().length -> 1
"@".getBytes("UTF-8").length -> 1
new String("@".getBytes("UTF-8")) -> @
"@".getBytes("UTF-16").length -> 4
new String("@".getBytes("UTF-16")) -> ��

这是一个2Byte UTF-8字符:

µ
"µ".length() -> 1
"µ".getBytes().length -> 2
"µ".getBytes("UTF-8").length -> 2
new String("µ".getBytes("UTF-8")) -> µ
"µ".getBytes("UTF-16").length -> 4
new String("µ".getBytes("UTF-16")) -> ��

这是一个4Byte UTF-8角色:


"".length() -> 2
"".getBytes().length -> 4
"".getBytes("UTF-8").length -> 4
new String("".getBytes("UTF-8")) -> 
"".getBytes("UTF-16").length -> 6
new String("".getBytes("UTF-16")) -> ���c��

编辑: 应该计算“压缩”JSON的长度,即没有任何不必要的空格(来自漂亮的打印)。

1 个答案:

答案 0 :(得分:0)

如果您的JSON可以作为字符串使用,并且所有空格都已修剪,String.getBytes(String charsetName).length应该为您提供正确的大小。

请注意,在JVM内存中,字符串将以UTF-16编码,并且一旦写入文件或数据库,它就会使用不同的编码(UTF-8、8859-1 ...),因此具有不同的大小。