Я создаю веб-приложение в NodeJS версии 12. У меня есть данные из старой базы данных MySQL. Есть несколько полей, которые содержат символы, которые не отображаются должным образом из-за проблемы кодирования со старой базой данных. Уже есть некоторые подобные вопросы, но ни один из них не решил мою проблему. После попытки я немного ближе к решению, но мне все еще нужна помощь в этом.
Текущее значение в базе данных для преобразования:
Rikuchi SokuryoÌ„bu [cartographer], 陸地測é‡éƒ¨
Требуемое новое значение базы данных:
Rikuchi Sokuryōbu [cartographer], 陸地測量部
Проблема такая же, как описано в этом похожем вопросе . Однако принятый ответ не решает мою проблему. Мне нужно написать NodeJS для преобразования данных в базе данных в читаемую строку.
Я также пытался следовать ответу на этот похожий вопрос . Я понимаю, что значение должно быть сначала преобразовано в двоичный код, а затем в желаемую кодировку. Тем не менее, он не возвращает желаемый результат. Я пробовал это с пакетами iconv и iconv-lite.
ПОПЫТКА 1:
let buf = new Buffer(body, 'binary');
let conv = new iconv.Iconv('windows-1252', 'utf8');
let str = conv.convert(buf).toString();
console.log(`original: ${body} output: ${str.toString()}`);
// original: Rikuchi SokuryoÌ„bu [cartographer], 陸地測é‡éƒ¨
// output: Rikuchi SokuryoМbu [cartographer], й"ёеS°жё¬й!Џй’Ё
ПОПЫТКА 2: iconv-lite
let buf = new Buffer(body, 'binary');
const str = iconvlite.decode(buf, 'windows-1252');
console.log(`original: ${body} output: ${str.toString()}`);
// original: Rikuchi SokuryoÌ„bu [cartographer], 陸地測é‡éƒ¨
// output: Rikuchi SokuryoМbu [cartographer], й"ёеS°жё¬й!Џй’Ё
ПОПЫТКА 3: iconv-lite
// This one *almost* works however there are still some undefined characters
let buf = new Buffer(body, 'utf-8');
const win = iconvlite.encode(buf, 'windows-1252');
console.log(`original: ${body} output: ${win.toString()}`);
// original: Rikuchi SokuryoÌ„bu [cartographer], 陸地測é‡éƒ¨
// output: Rikuchi Sokuryōbu [cartographer], 陸地測�?部
UPDATE:
Этот веб-сайт string-functions.com может кодировать и декодировать строки.
Вся проблемная строка корректно декодируется с настройками: «Кодировать с помощью: Windows-1252» и «Декодировать с помощью: utf-8»
Это также отлично работает для более крупных примеров этой проблемы. Мне просто нужно повторить, как именно этот сайт делает конверсию. Мой код в попытке № 3 очень близок, но должен быть пропущен шаг.