- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我找到了 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/
我需要一个正则表达式来匹配所有标点符号,例如标准的 [,!@#$%^&*()],但包括国际标记,例如倒置的西类牙语问号、中文句号等.我的 google-fu 快用完了。有人手头有这样一个与 Javas
跟进之前的 question我有关于水平数组和垂直数组的问题,我对它们各自的分隔符有疑问。 问题定义: 这里是比较两个数组的错误方法的示例: {=SUMPRODUCT(--({"Apple","Pea
我正在尝试对手机号码进行验证检查,有点类似于 gmail 的实现。 Gmail signup page link 但是各个国家/地区的电话号码差异很大,因此很难为此构建正则表达式。 我在这里查看了一些
这就是我们所拥有的: 数据库中的用户,包括 phone_number 字段。当用户创建他们的帐户时,他们必须输入他们的电话号码。我们可以要求特定的格式,我们会这样做: + [countrycode]
对于Google-Chrome扩展程序,我想在所有Google页面上加载内容脚本。做这个的最好方式是什么? 我在manifest.json中尝试了此操作,但它不起作用: "matches": ["ht
在 JavaScript 中使用数字格式化程序时,是否可以在值之前使用欧元符号来格式化值? this.formatter = new Intl.NumberFormat('nl-be', { st
我们有一个 iOS 应用程序,在美国拥有数百万用户,需要国际化并在 11 个不同的国家/地区(许多国家/地区使用不同的语言)提供。已制定出适用于特定国家/地区以及不同货币等的公开隐藏功能的所有技术细节
如何在使用 react-intl 时使用 来控制断字。我有一条像 Rs 这样的消息。 100,00,000 但它正在打破卢比。无论如何可以将消息写为 Rs. 100,00,000当我尝试这样做时,
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我正在研究具有端点的 swagger API 规范: /authorizations 我也想为这个端点定义一个替代拼写(授权)。这可能吗?或者我是否需要为每个拼写定义一个单独的路由? /authori
我正在尝试安装 CakePHP 3-0-0 版本并且我已经从 here 下载了源代码.但它显示启用 intl 扩展 的错误。因为我已经在 php.ini 文件中将 ;extension=php_int
#include #include #include int main() { const wchar_t *str = L"\u041F\u043E\u0440\u044F\u0434
Transliterator::listIDs()将列出 ID,但显然它不是完整列表。 在example from this page ,ID 看起来像: Any-Latin; NFD; [:Nons
任务是在不同的语言环境中显示订阅价格,例如 5$/month。 我可以用 Intl 管理价格部分很好,但坚持时间段翻译部分。 我可以使用自己的翻译字符串,但如果可能,我更愿意使用默认的 Intl 版本
任务是在不同的语言环境中显示订阅价格,例如 5$/month。 我可以用 Intl 管理价格部分很好,但坚持时间段翻译部分。 我可以使用自己的翻译字符串,但如果可能,我更愿意使用默认的 Intl 版本
我正在使用 React 制作一个多语言通用应用程序,但我很难找到处理区域设置数据的最佳方法。该应用程序将提供 16 种语言版本,并且翻译的消息量非常大,因此我无法将所有消息加载到一个大 json 中(
我是一名优秀的程序员,十分优秀!