[240-6ren">
gpt4 book ai didi

javascript - 为什么 Java 和 Javascript 中的字节数组表示形式不同?

转载 作者:行者123 更新时间:2023-11-29 18:03:36 25 4
gpt4 key购买 nike

我试图在 Java 和 Javascript 中查看 👍 的 UTF-8 字节。

在 JavaScript 中,

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

在 Java 中,

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

我使用我找到的与语言对应的方法( JSJava )将这些字节数组转换为十六进制字符串,并且都返回了 F09F918D

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

我很想知道为什么这两种语言选择不同的方式来表示字节数组。我花了一段时间才弄清楚这一点。

最佳答案

在 Java 中,所有字节都是有符号的。因此,一个字节的范围是从 -128 到 127。不过在 Javascript 中,返回值只是整数。因此它可以使用最大 255 的完整范围以十进制表示。

因此,如果您将两个结果都转换为 1 字节的十六进制表示形式 - 它们将是相同的:F0 9F 91 8D

说到 为什么 java 决定消除无符号类型,那是一个单独的 discussion .

关于javascript - 为什么 Java 和 Javascript 中的字节数组表示形式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33099626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com