众所周知,ASCII使用7位来编码字符,所以用来表示文本的字节数总是小于文本字母的长度
Ví dụ:
StringBuilder text = new StringBuilder();
IntStream.range(0, 160).forEach(x -> text.append("a")); // generate 160 text
int letters = text.length();
int bytes = text.toString().getBytes(StandardCharsets.US_ASCII).length;
System.out.println(letters); // expected 160, actual 160
System.out.println(bytes); // expected 140, actual 160
luôn luônletters
= bytes
, 但预期是 letters
> bytes
.
主要问题:hiện hữusmpp
协议(protocol) sms
正文必须是 <= 140
字节,如果我们使用 ascii
编码,那么你可以写160
字母 =(140*8/7)
,所以我想将文本编码为 7-bit based ascii
, 我们正在使用 JSMPP
图书馆
任何人都可以向我解释并指导我正确的方法,在此先感谢(:
(160*7-160*8)/8 = 20,因此您预计脚本末尾使用的字节数会减少 20 个。但是,寄存器有一个最小大小,所以即使你不使用所有位,你仍然不能将它连接到另一个值,所以你仍然使用 8 位字节作为你的 ASCII 码,这就是为什么你得到相同的号码。比如小写的“a”在ASCII中是97
01100001
注意前导零仍然存在,即使它没有被使用。您不能只使用它来存储另一个值的一部分。
结论是,在纯 ASCII 中,字母必须始终等于字节数。
(或者想象一下将 7 号物体放入 8 号盒子中。您不能将物体分成几 block ,因此盒子的数量必须等于物体的数量 - 至少在这种情况下是这样。)
Tôi là một lập trình viên xuất sắc, rất giỏi!