2015-11-27 2 views
2

В приложении node.js я получаю загруженный текстовый файл с промежуточным программным обеспечением Multer. Это действительный файл с кодировкой ucs2. Когда я пытаюсь прочитать его, я получаю нечитаемую строку с номером buffer.toString(). Он получает правильный результат с buffer.toString('ucs2'). Но кодировка, которую дает Малтер, - req.file.encoding === '7bit'.Express/Multer обнаруживает 7-битное кодирование текстового файла, когда он ucs2. Являются ли они синонимами?

Мой вопрос: я могу сделать прямую связь между «7bit» и «ucs2», поэтому всякий раз, когда я получаю «7Bit» от Multer я могу сделать buffer.toString('ucs2')? Или это может означать другие кодировки? В последнем случае, как я могу убедиться в правильном содержании текстового файла?

здесь является частью кода:

var getFile = function(req, res, next) { 
    var encoding = req.file.encoding; 
    fs.readFile(req.file.path, function (err, buffer) { 
     var data = buffer.toString(encoding); 
    } 
} 

Это точный код не будет работать, потому что здесь encoding дает «7Bit», который не понят toString.

Спасибо.

+0

У меня есть частичный ответ: при установке файла UTF-8 в этой пропускной способности Multer обнаруживает «7-битную» кодировку, так что это не поможет. Как тогда я могу определить базовое кодирование буфера? –

ответ

0

Нет никакого «обнаружения», значение encoding - это просто то, что (если есть), переданное клиентом как поле/файл Content-Transfer-Encoding. По большей части это значение можно игнорировать, поскольку оно не используется (больше). Вы должны определить кодировку содержимого, основанную на типе mime.

+0

Тип mimetype имеет значение «application-octet-stream»; что не помогает. У меня есть частичный ответ через плагин «node-chardet». То, что мне еще нужно согласовать, - это различие между типами кодов, заданных этим плагином (UTF_32BE, UTF_16LE, windows_1251 и т. Д.) И теми, которые используются типом Buffer (UTF8, UCS2, Ascii), как показано здесь: https: // millermedeiros .github.io/mdoc/examples/node_api/doc/buffers.html –

+0

Для 'application/octet-stream', что указывает на 8-битный двоичный файл, потому что это поток * октетов *. Независимо от того, является ли фактическое содержание 8-битным двоичным или нет, это отдельная проблема и требует проверки самого содержимого. – mscdex

Смежные вопросы