为什么WhatsApp和JavaScript返回相同Unicode字符串的不同长度?

3
问题中的 Unicode 字符串:
ਪਹਿਲਾਂ ਲੋਕਾਂ ਦੇ ਦਿਲਾਂ ਦਿਮਾਗ਼ਾਂ ਚੋਂ ਇਹ ਵਹਿਮ ਕੱਢੋ ਕਿ 
ਅਸੀਂ ਹਿੰਦੂ ਹਾਂ,
ਅਸੀਂ ਸਿੱਖ ਹਾਂ,
ਅਸੀਂ ਮੁਸਲਮਾਨ ਹਾਂ,
ਅਸਲੀਅਤ ਇਹ ਹੈ ਕਿ 
ਅਸੀਂ ਭੁੱਖੇ ਹਾਂ, 
ਅਸੀਂ ਬੇਰੁਜ਼ਗਾਰ ਹਾਂ, 
ਅਸੀਂ ਨਸ਼ੇੜੀ ਹਾਂ, 
ਅਸੀਂ ਲਾਚਾਰ ਹਾਂ, 
ਅਸੀਂ ਬੇਵਕੂਫ਼ ਹਾਂ, 
ਅਸੀਂ ਬੀਮਾਰ ਹਾਂ, 

语言:旁遮普语
格式:Unicode

问题:
Javascript 报告其 str.length() = 226;然而WhatsApp说是700个字符

Javascript 代码:

console.log(inputStr.length);

Whatsapp截图 01:
很好,没有错误:(计数为698或699)

Whatsapp截图 01

仅仅是从手机键盘上添加一个新行就会使计数超过700 Whatsapp截图 02

  1. 为什么字符串长度存在如此大的不匹配?
  2. 哪个数字是真实的?
  3. 如何在Javascript中得到与Whatsapp结果相似的结果?
2个回答

1
  1. 这似乎是Whatsapp的一个错误。如果您尝试输入带有换行符的文本,您会发现在第15行时,无论当前字符计数是多少,它都会给出超过700个字符的错误。

    如果您尝试将您的字符串放入没有换行符的情况下,它将起作用,不显示超过700个字符的消息(如下图所示)

  2. 正确长度是javascript字符串长度,即226个字符。

您没有换行符的文本


您的判断是正确的,WhatsApp中出现“700 chars”错误通常是由于第15个新行后面没有其他内容引起的。 - DavChana

1
那可能是因为“length”的计算方式。旁遮普语和其他任何“外国”语言一样,都基于Unicode。而Unicode在存储字符的长度上并没有固定的长度。Unicode字符的长度范围从1个字节到4个字节不等。例如,“ਕਿ”这个字符看起来像单个字符,但它可能需要4个字节才能存储。请查看this帖子以获取更多详细信息。

您说得对,但需要提到的是,实际上ਕਿ是两个字母,或者更具体地说,是一个元音和一个辅音字母。在旁遮普语中,AEIOU和其他元音不是字母,只是常规辅音字母上的额外符号。因此,ਕਿ是Ki,而ਕ'是K。 - DavChana
完全理解(尤其是来自马拉地背景)。然而,这不是Unicode的工作方式。请查看此链接(https://mothereff.in/byte-counter),该链接计算Unicode长度。字符ਕਿ有两个字符,但占用6个字节。 - Sukhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接