Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 在nodejs中使用双引号切片缓冲区时获取额外字符_Javascript_Node.js_Encoding_Buffer_Special Characters - Fatal编程技术网

Javascript 在nodejs中使用双引号切片缓冲区时获取额外字符

Javascript 在nodejs中使用双引号切片缓冲区时获取额外字符,javascript,node.js,encoding,buffer,special-characters,Javascript,Node.js,Encoding,Buffer,Special Characters,我试图将一个javascript对象(stringized)裁剪到一个确定的大小(特别是针对Apple Push Notification 256 Max),但是我刚刚发现,当我的其中一个变量有一个包含双引号的字符串时,它会得到一个与限制不符的额外字符,在下面的示例中,我复制了一个30大小的限制 var object = {"hola":"mundo", "data":""} var objectBuffer = new Buffer(JSON.stringify(object)) c

我试图将一个javascript对象(stringized)裁剪到一个确定的大小(特别是针对Apple Push Notification 256 Max),但是我刚刚发现,当我的其中一个变量有一个包含双引号的字符串时,它会得到一个与限制不符的额外字符,在下面的示例中,我复制了一个30大小的限制

var object = {"hola":"mundo", "data":""}

var objectBuffer = new Buffer(JSON.stringify(object))
    console.log(objectBuffer.length) // this should be 26 OK

var data0 = new Buffer('normal', 'utf-8')
console.log(data0.length) // this should be 6 OK

var data1 = new Buffer('"normal', 'utf-8') // Note extra double quote (it only happends with double quotes weird characters like ó work ok)
console.log(data1.length) // this should be 7 OK

object.data = data0.toString('utf-8', 0, 4)
console.log(object) // {hola:'mundo', data:'norm'} OK

var objectBuffer = new Buffer(JSON.stringify(object))
console.log(objectBuffer.length) // this should be 30 OK

object.data = data1.toString('utf-8', 0, 4)
console.log(object) // {hola:'mundo', data:'"norm'} OK

var objectBuffer = new Buffer(JSON.stringify(object))
console.log(objectBuffer.length) // this should be 30 NOT OK got 31 instead

JSON.stringify中的实际字符串在代码末尾是
{“hola”:“mundo”,“data”:“\”或“}
。该字符串包含31个字符,包括用于转义
数据
属性字符串值内的双引号的反斜杠(
\
)。反斜杠是“额外的”“字符。

您可以为特殊字符使用自定义替换程序,并在JSON.stringify方法中传递该函数:

请参阅以下部分:“使用替换参数JSON.stringify(javascriptObject,方法)的示例”

函数替换程序(键、值){ 如果(值的类型==“字符串”){ 返回未定义; } 返回值; } var foo={基金会:“Mozilla”,型号:“盒子”,周:45,运输:“汽车”,月:7}; var jsonString=JSON.stringify(foo,replacer);
这就是对象和objectBuffer如何结束构建>对象{hola:'mundo',数据:''nor'}>objectBuffer.toString()'{“hola”:“mundo”,“data”:“\\”或“}”>JSON.stringify中的实际字符串是
{“hola”:“mundo”,“data”:“\\”或“}”
在代码末尾。该字符串包含31个字符,包括用于转义
数据
属性字符串值内双引号的\字符。我认为这是您的罪魁祸首。只需在代码末尾再次记录stringized对象,您就会明白我的意思。这可能很方便:)我实际上使用了regex替换结束了r更改转义字符\n\r\t“\ function replacer(key, value) { if (typeof value === "string") { return undefined; } return value; } var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; var jsonString = JSON.stringify(foo, replacer);