由于Unicode,长度显示为497而不是562;如何获得真正的长度?

时间:2014-01-09 02:21:03

标签: 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 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

我需要输出的长度显示为总字符文字;我该如何解决这个问题?

这是JSFiddle上的字符串。

2 个答案:

答案 0 :(得分:4)

长度 497.字符串文字在代码可以解决之前很久就被解释了。内存中的实际字符串表示包含那些unicode字符。

如果您希望按字面意思解释\u00b0之类的内容,请使用额外的反斜杠来逃避反斜杠。

答案 1 :(得分:1)

所以...你有一个字符串。它有一些'有趣'的Unicode。您将它传递给其他人的代码,该代码选择用某些\ u转义表示它。一旦它有了这些逃逸,其他一些代码就会过长并拒绝它,计算逃逸。

你不能通过向穷人的Javascript解释器询问'长度'来解决这个问题,因为,在那时,那些Unicode字符实际上是单个字符。你需要知道其他代码之后的长度,并扩展为带有转义的表示。

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