gpt4 book ai didi

javascript - 国际统计短信字符

转载 作者:搜寻专家 更新时间:2023-11-01 05:07:43 24 4
gpt4 key购买 nike

我找到了 Count characters/sms using jQuery , 但不支持中文、日文、泰文等国际字符。

var $remaining = $('#remaining'),
$messages = $remaining.next();

$('#message').keyup(function(){
var chars = this.value.length,
messages = Math.ceil(chars / 160),
remaining = messages * 160 - (chars % (messages * 160) || messages * 160);

$remaining.text(remaining + ' characters remaining');
$messages.text(messages + ' message(s)');
});

以下是一些错误字符计数的示例:

您好,請問你吃飯了嗎? << 11 characters

สวัสดีคุณกินหรือ? << 17 characters

こんにちは、あなたは食べていますか? << 18 characters

안녕하세요, 당신이 먹는 거죠? << 17 characters

हैलो, आप खाते हैं? << 18 characters

Добры дзень, вы ясьце? << 22 characters

如何使用非 ASCII 字符使其工作?

最佳答案

这里你真的不能算“字符”。根据SMS维基百科上的文章 三种不同编码之一用于 SMS(7 位 GSM、8 位 GSM 和 UTF-16)。所以首先你需要知道/决定你将使用哪种编码。

如果您知道自己将始终使用 UTF-16,那么您可以计算 16-bit code units 的数量。一个字符串将占用。一条标准 SMS 可以包含 70 个 16 位代码单元。但这也会将拉丁字符的消息限制为 70 个。因此,如果您想对拉丁字符使用完整的 160 个字符(使用 7 位编码)或 140 个字符(使用 8 位编码),那么您需要区分这三种情况。

计算 UTF-16 16 位代码单元的示例:

var message = "您好,請問你吃飯了嗎?";

var utf16codeUnits = 0;

for (var i = 0, len = message.length; i < len; i++) {
utf16codeUnits += message.charCodeAt(i) < 0x10000 ? 1 : 2;
}

顺便说一句,这得出与您发布的“不正确”相同的数字,因此您需要解释为什么您认为它们不正确。


编辑

尽管我已经被接受了,但我还是快速破解了一个函数,该函数可以正确(据我所知)计算 GSM 7 位(如果可能)和 SMS 消息的 UTF-16 大小:http://jsfiddle.net/puKJb/

关于javascript - 国际统计短信字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5454910/

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