我在做tcp server . 服务器发过来的字符串先计算长度。 发到客户端。客户端是用delphi 开发。结果两个环境计算的结果不一样。
见图。
.length得到的是字符长度,不是字节长度,还有在一些不同的编码方式下汉字占用的字节是不同的,比如在GB2312中汉字是2个字节,而在UTF-8编码格式中汉字可以是2个字节,也可能是3个字节,甚至在iso-8859-1编码中汉字是5个字节的!
socket data事件接收到默认是个buffer,用Buffer.byteLength(string[, encoding])来获取长度。
Buffer.byteLength(string[, encoding])
str = '\u00bd + \u00bc = \u00be'; console.log(str + ": " + str.length + " characters, " + Buffer.byteLength(str, 'utf8') + " bytes"); // ½ + ¼ = ¾: 9 characters, 12 bytes
Buffer.byteLength()也不对??
String.prototype.cnLength = function () { var cArr = this.match(/[^\x00-\xff]/ig); return this.length + (cArr == null ? 0 : cArr.length); } '你好'.cnLength() 4
这是一个政治问题啊,说多了要查水表的!
让客户端适应吧,
谢谢大家有, 已解决了。处理方案是服务器按bytes来发,客户端按bytes来接就行了。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
.length得到的是字符长度,不是字节长度,还有在一些不同的编码方式下汉字占用的字节是不同的,比如在GB2312中汉字是2个字节,而在UTF-8编码格式中汉字可以是2个字节,也可能是3个字节,甚至在iso-8859-1编码中汉字是5个字节的!
socket data事件接收到默认是个buffer,用
Buffer.byteLength(string[, encoding])来获取长度。Buffer.byteLength()也不对??
这是一个政治问题啊,说多了要查水表的!
让客户端适应吧,
谢谢大家有, 已解决了。处理方案是服务器按bytes来发,客户端按bytes来接就行了。