Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 由于Unicode,长度显示为497而不是562;如何获得实际长度?_Javascript - Fatal编程技术网

Javascript 由于Unicode,长度显示为497而不是562;如何获得实际长度?

Javascript 由于Unicode,长度显示为497而不是562;如何获得实际长度?,javascript,Javascript,下面的字符串显示长度为497,而实际上是562个字符: alert('[**BFI/KBFI**](http://aviationweather.gov/adds/metars/?station_ids=KBFI&std_trans=translated&chk_metars=on&hoursStr=most+recent+only&chk_tafs=on&submitmet=Submit): Boeing Field King County Intern

下面的字符串显示长度为
497
,而实际上是
562
个字符:

alert('[**BFI/KBFI**](http://aviationweather.gov/adds/metars/?station_ids=KBFI&std_trans=translated&chk_metars=on&hoursStr=most+recent+only&chk_tafs=on&submitmet=Submit): Boeing Field King County International Airport \u2022 **Observed:** 55 mins ago \u2022 **Wind:** 170\u00B0/S @ 12 kts \u2022 **Visibility:** 10.0mi/16.09km \u2022 **Sky (AGL):** Few clouds @ 1,800ft; Broken clouds @ 2,600ft; Overcast @ 3,600ft \u2022 **Temperature:** 10.6\u00B0C/51\u00B0F \u2022 **Dewpoint:** 6.7\u00B0C/44\u00B0F \u2022 **Pressure:** 29.70" Hg/1,006mb \u2022 **Conditions:** MVFR'.length);
有65个字符的差异,我认为这是由Unicode字符造成的,例如度符号
\u00B0

我需要输出的长度显示为总字符数;我怎样才能解决这个问题

这是上面的字符串。

长度是497。字符串文字在您的代码能够理解它之前很久就被解释了。内存中的实际字符串表示形式包含这些unicode字符


如果您希望像
\u00b0
这样的内容按字面解释,请使用额外的反斜杠来摆脱反斜杠。

因此。。。你有一根绳子。它有一些“有趣的”Unicode。您正在将它传递给其他选择用一些转义来表示它的代码。一旦它有了这些转义,其他一些代码就会去拒绝它,因为转义太长了

您无法通过向可怜的Javascript解释器询问“长度”来解决这个问题,因为在这一点上,这些Unicode字符实际上是单个字符。您需要知道这另一个代码经过并扩展为带转义符的表示形式后的长度


一位聪明的评论者建议,JSON.stringify(str).length可能是一个足够好的近似值。

你不能。对于javascript,\uxxx是一个字符,句号,讨论结束。您必须执行\\uxxx,然后它就不再是度符号了。这只是文字的问题,如果您对文本进行ajax处理,则可以获得转义长度。不,您不能。如果您在字符上迭代,您的迭代将看到\uxxx作为一个字符。您的文本是过度编码的,但是您可以通过查看JSON.stringify(str).length,而不仅仅是str.length,它与您的文本一起显示为500。如果你想要一个字符串的实际字节重量,你必须使用一个奇怪的encodeURIComponent例程。@DannyBeckett:我的意思是根据javascript过度编码,不是这样…@DannyBeckett你在说什么?在堆栈交换聊天中粘贴的内容不是JavaScript解释器解释的JavaScript字符串文字。。。只是一根绳子。@DannyBeckett机器人是什么?@DannyBeckett你在说什么?机器人与代码中的字符串文字有什么关系?@DannyBeckett你的观点是什么?你没在听我说什么。当您键入字符串文字时,将解释您键入的内容。字符串中的内存已经存在。“这些是不同的事情。”丹尼·贝克特我刚才去了你的聊天室。你能重读一下我的帖子和其他人的帖子吗?答案就在你面前。我不会把它传递给其他用
\u
字符表示它的代码,我是这样表示的,因为原始Unicode符号在聊天中显示为错误编码。因此,聊天,如果有的话,计算长度是错误的。我需要一个bug的解决方法。所以,这里有一个解决方法,在一个答案和一个注释中复制。你不是这样表示它的。如果是,它将打印为\\uxxx,长度将计算为6。结果是,
:123456
在消息前面加上前缀,将其设置为503;超过500个最大字符的3个。它与Unicode无关。对不起,伙计们,我没考虑过。