Благодаря комментариям выше я понимаю, что, несмотря на то, что в моей базе данных есть набор символов "ISO8859_1", IBEXPERT использует и представляет мне данные в кодировке WINDOWS-1252 (известной как ANSI), которая объясняет, почему Я видел 0x80 в их программе просмотра HEX.
Может быть, WINDOWS-1252 расширяет набор символов ISO8859_1 ??
Например:
Запуск кода ниже работает нормально:
€ правильно декодируется.
var str = iconv.decode(buffer, 'WINDOWS-1252');
console.log({str});
console.log(new Buffer(str, 'utf8'));
var str2 = iconv.encode(new Buffer('€','utf8'),'WINDOWS-1252');
console.log({strEncoded: str2})
/*
{ str: '€' }
<Buffer e2 82 ac>
{ strEncoded: <Buffer 80> }
* */
Странная часть заключается в том, что мой запрос к базе данных, который использует node-firebirdlib-fbclient для связи с моей базой данных firebird, разрешается с помощью символа UTF8, который не может быть представлен в UTF8, как вы можете видеть по значению символа, которое is '', что переводит в 0xc2 0x80.
{ idNumber: 1,
id: 'EUR',
taxPercentage: 1,
isDefault: -1,
accountNumber: null,
dontUse: false,
symbol: '' },
eur: <Buffer c2 80> }
eur: выводится console.log(new Buffer(result.symbol,'utf8'))
И расшифровываем это из utf8 в 'WINDOWS-1252' следующей командой
iconv.decode(Buffer.from(currency.symbol, 'utf8'), 'WINDOWS-1252')
возвращает
...
"defaultCurrency": {
"id": "EUR",
«символ»: «В»,
"label": "EUR"
} ...