在我的JavaScript代码中,我需要以这种格式向服务器撰写消息:
<size in bytes>CRLF
<data>CRLF
Run Code Online (Sandbox Code Playgroud)
例:
3
foo
Run Code Online (Sandbox Code Playgroud)
数据可能包含unicode字符.我需要将它们作为UTF-8发送.
我正在寻找最流行的浏览器方式来计算JavaScript中字符串的长度(以字节为单位).
我试过这个来组成我的有效载荷:
return unescape(encodeURIComponent(str)).length + "\n" + str + "\n"
Run Code Online (Sandbox Code Playgroud)
但它没有给我准确的结果旧浏览器(或者,这些浏览器中的字符串可能是UTF-16?).
有线索吗?
更新:
示例:???! Naïve?UTF-8中字符串的长度(以字节为单位)为15个字节,但某些浏览器报告的是23个字节.
是否有可能在Javascript中检测字符串是否包含多字节字符?如果是这样,是否可以分辨哪些?
我遇到的问题是这个(如果Unicode char不适合你,我会道歉)
s = "";
alert(s.length); // '2'
alert(s.charAt(0)); // '??'
alert(s.charAt(1)); // '??'
Run Code Online (Sandbox Code Playgroud)
在这里编辑一点清晰(我希望). 据我所知,Javascript中的所有字符串都表示为一系列UTF-16代码点,这意味着常规字符实际占用2个字节(16位),因此我在标题中使用"多字节"有点关闭.某些字符不属于基本多语言平面(BMP),例如上例中的字符串,因此它们占用两个代码点(32位).这是我问的问题.我也没有编辑原始标题,因为对于那些对这些东西不太了解的人(因此会搜索SO的信息),"multibyte"会有意义.