Конвертируйте windows1252 в utf-8 в специальные символы NodeJS - PullRequest
0 голосов
/ 26 июня 2019

Я создаю веб-приложение в 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 очень близок, но должен быть пропущен шаг.

stringfunctions.com

1 Ответ

0 голосов
/ 27 июня 2019

Я решил эту проблему с помощью модуля windows-1252 для кодирования исходного текста, а затем расшифровал его с помощью модуля iconv-lite.

const win = windows1252.encode(body);
const str = iconvlite.decode(win, 'utf-8');
return str.toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...