Похоже, вы используете windows-registry-node .Это, к сожалению, ошибка в том, # 44 .Репортер говорит:
Если я возвращаю необработанный буфер и использую iconv для преобразования из "ISO-8859-1" в "UTF-8", я получаю правильные символы
Обратите внимание, что это предполагает текущую кодовую страницу системы, и может не всегда быть корректной.(Возможно, можно сказать, что iconv обнаружит и использует текущую кодовую страницу?)
Точная проблема в registry.js :
// READ VALUE
result = advApi.RegQueryValueExA(key.handle.deref(), valueName, null, pKeyType, value,
pKeyDataLength);
Вот оноиспользует RegQueryValueExA, что означает выборку строк в качестве текущей кодовой страницы Windows, в отличие от RegQueryValueExW, которая будет использовать UTF-16.Таким образом, значение, которое является буфером Node.JS, не содержит UTF-8.Затем код вызывает Buffer.toString (), который по умолчанию принимает UTF-8:
if (value.type === types.LPTSR) {
// TODO not sure why buffer's utf8 parsing leaves in the unicode null
// escape sequence. This is a work-around (at least on node 4.1)
value = value.toString().replace('\u0000', '');
}
Так что это нужно исправить в windows-registry-node.Лучшее решение - это, вероятно, установить код для UTF-16, используя версию -W функции и value.toString('utf16le');
.