Skip to content

Commit ebb0fab

Browse files
committed
Connection: always assume UTF-8 for directory listings (for now)
1 parent ae0d41e commit ebb0fab

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

lib/connection.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ var fs = require('fs'),
44
Socket = require('net').Socket,
55
EventEmitter = require('events').EventEmitter,
66
inherits = require('util').inherits,
7-
inspect = require('util').inspect;
7+
inspect = require('util').inspect,
8+
StringDecoder = require('string_decoder').StringDecoder;
89

910
var Parser = require('./parser');
1011
var XRegExp = require('xregexp').XRegExp;
@@ -432,13 +433,16 @@ FTP.prototype.list = function(path, zcomp, cb) {
432433
}
433434

434435
var sockerr, done = false, replies = 0, entries, buffer = '', source = sock;
436+
var decoder = new StringDecoder('utf8');
435437

436438
if (zcomp) {
437439
source = zlib.createInflate();
438440
sock.pipe(source);
439441
}
440442

441-
source.on('data', function(chunk) { buffer += chunk.toString('binary'); });
443+
source.on('data', function(chunk) {
444+
buffer += decoder.write(chunk);
445+
});
442446
source.once('error', function(err) {
443447
if (!sock.aborting)
444448
sockerr = err;
@@ -447,6 +451,10 @@ FTP.prototype.list = function(path, zcomp, cb) {
447451
source.once('close', ondone);
448452

449453
function ondone() {
454+
if (decoder) {
455+
buffer += decoder.end();
456+
decoder = null;
457+
}
450458
done = true;
451459
final();
452460
}

0 commit comments

Comments
 (0)