Node.js打破了我的输出

时间:2012-12-22 15:50:28

标签: node.js

我基本上有这样的东西:

var escape = function ( x ) {
    if ( ! x ) return '\\N';
    return '"' + x.replace( /\r\n/g, '\n' ) + '"';
};

array.forEach( function ( item ) {
    process.stdout.write( 'foo:' + [ a, b, d ].map( escape ).join( '\t' ) + '\n' );
    item.child.forEach( function ( sub ) {
        process.stdout.write( 'bar:' + [ e, f, g ].map( escape ).join( '\t' ) + '\n' );
    } );
} );

但是,输出文件在显然随机的位置包含字符串,例如:

bar:\N        "1981258"       "Can't Get N^@^@^@^@^@^@^@^@^@^@Her Bones In Thefoo:"1981259" "164264"
bar:\N        ^@ Left"        \N      \N
bar:^@^@^@    \N

这对我来说没有意义,因为程序不能打印任何内容而不将其包装成双引号。

我认为这是一个Node.js错误,由于这一行,但我只是想知道是否有解决方法。

b^@^@^@^@^@^@^@^@^@x 1 root root 1,5G 17 d\303\251c.  19:14 /D/Release.cs

2 个答案:

答案 0 :(得分:0)

你不必逃避crlf序列。

$ node
> var crlf = '\n';
undefined
> process.stdout.write( 'foo:' + crlf + 'bar:');
foo:
bar:true
> process.stdout.write( 'foo:' + crlf + 'bar:' + crlf + '\\n' + 'foobar?');
foo:
bar:
\nfoobar?true
>

(两行末尾的“true”是REPL中process.stdout.write的返回值) 也就是说,你可以发布一个带有示例输入和更多代码的要点(我不知道a,b,d,e,f,g,......指的是什么)。

此外,根据您的输入(并查看输出),您可能更有意义使用缓冲区而不是原始字符串。

答案 1 :(得分:0)

可能是文件系统写的文件系统问题(vmhgfs)。第二个生成的文件没有这个垃圾。