2015-10-13 37 views
2

我试图看到Java和Javascript中的UTF-8字节。为什么在Java和Javascript中不同的字节数组表示法?

在Javascript中,

new TextEncoder().encode("");回报=>[240, 159, 145, 141]

而在Java,

"".getBytes("UTF-8")回报=>[-16, -97, -111, -115]

我转换使用我发现对应的方法的那些字节数组到十六进制字符串到语言(JS,Java)并且都返回F09F918D

事实上,-16 & 0xFF给人=>240

我好奇地想知道更多关于为什么这两种语言选择代表字节数组不同的方式。我花了一段时间才弄清楚这一点。

+1

一个是签名的,一个是无符号的。仍然是相同的二进制表示 –

回答

4

在Java中,所有字节都被签名。因此,一个字节的范围是从-128到127.然而,在JavaScript中,返回的值就是整数。因此,如果将两个结果都转换为1字节的十六进制表示形式 - 那些将会是相同的:F0 9F 91 8D。因此,它可以用十进制表示,范围最大为255。

说到为什么 java决定去掉无符号类型,那就是单独的discussion

相关问题