2014-11-03 3 views
5

Мое приложение импортирует все сообщения из папки Notes GMail. Для этого я использую модуль imap npm.Конвертировать буфер base64 -> utf8 encoding node.js

Используя пример со своей страницы GitHub я получаю все содержимое сообщения в буфер:

stream.on('data', function(chunk) { 
    count += chunk.length; 
    buffer += chunk.toString('utf8'); 
}); 

Однако то, что я получаю предложения вроде

0KHQvdCw0YfQsNC70LAg0YHQvtC30LTQsNC10YLRgdGPINGA0LXRiNC10YLQutCwINC/0YDQvtGB 0YLRgNCw0L3RgdGC0LLQsCDQstC+0L7QsdGA0LDQttC10L3QuNGPLiZuYnNwOzxkaXY+PGJyPjwv ZGl2PjxkaXY+0JfQsNGC0LXQvCDQvdCwI 

(неправильное преобразование с русского)

Я выяснил, что это фрагменты текста, закодированные в base64, и для их чтения мне нужно преобразовать его из base64 в utf8.

Существует также иногда раздражает = символ, который появляется из ниоткуда ...

letting them f= all on her shoulders 

Вы знаете, как я могу избавиться от этих двух проблем?

Спасибо!

+1

для того, чтобы конвертировать из base64 в utf8 вы можете использовать '(новый буфер (оригинал, 'base64')). ToString ('utf8')'. Не могли бы вы предоставить более подробную информацию о проблеме '='? – jabclab

+0

@jabclab это работает, но только для буферов, содержащих только русский. если есть буфер, который имеет только английский текст, английский или русский, он производит тарабарщину. Думаю, мне нужно запустить какой-то скрипт перед преобразованием, чтобы определить кодировку, не так ли? –

+0

@jabclab относительно проблемы = почему-то иногда знак = просто вставляется случайно в текст. я не могу найти, где именно оно появляется ... спасибо! –

ответ

11

Для того, чтобы конвертировать из base64 закодирован String в utf8 вы можете использовать следующее:

var base64encoded = '0KHQvdCw0YfQsNC70LAg0YHQvtC30LTQsNC10YLRgdGPINGA0LXRiNC10YLQutCwINC/0YDQvtGB 0YLRgNCw0L3RgdGC0LLQsCDQstC+0L7QsdGA0LDQttC10L3QuNGPLiZuYnNwOzxkaXY+PGJyPjwv ZGl2PjxkaXY+0JfQsNGC0LXQvCDQvdCwI'; 

var utf8encoded = (new Buffer(base64encoded, 'base64')).toString('utf8'); 
//^'Сначала создается решетка пространства воображения.&nbsp;<div><br></div><div>Затем на' 
+0

'new Buffer()' устарел с * Стабильность: 0 *, см. [Mido's answer] (https://stackoverflow.com/a/40929309/1168315). – Dominik

11

new Buffer(...) устарела на некоторое время теперь, пойти на Buffer.from(...)

простой пример может быть:

var utf8encoded = Buffer.from(base64encoded, 'base64').toString('utf8');