Я пытаюсь преобразовать строку из CP932 (он же Windows-31J) в utf8 в javascript. По сути, я сканирую сайт, который игнорирует запрос utf-8 в заголовке запроса и возвращает кодированный текст cp932 (хотя метатег html указывает, что страница является shift_jis).
В любом случае, у меня вся страница хранится в строковой переменной с именем "html". Оттуда я пытаюсь преобразовать его в utf8, используя этот код:
var Iconv = require('iconv').Iconv;
var conv = new Iconv('CP932', 'UTF-8//TRANSLIT//IGNORE');
var myBuffer = new Buffer(html.length * 3);
myBuffer.write(html, 0, 'utf8')
var utf8html = (conv.convert(myBuffer)).toString('utf8');
Результат не тот, который должен быть. Например, строка: "投稿 者 さ ん の 稚 内 全日空 ホ テ ル の ク チ コ ミ (感想 · 情報)" выходит как «ソ ス ソ ス ソ ス электронной ソ ス メ ゑ ソ ス ソ ス ソ ス ソ ス ソ ス ソ ス т ソ ス ソ ス ソ ス S ソ ス ソ ス ソ ス ソ ス ソ ス г ソ ス е ソ ス ソ ス ソ ス フ ク ソ ス` 100 ス R ソ ス ~ (ソ ス ソ ス ソ ス ソ ス ソ ソ ソ ス ソ ス ソ ス ")"
Если я удаляю // TRANSLIT // IGNORE (что должно привести к тому, что он будет возвращать похожие символы для пропущенных символов, а при отсутствии пропуска символов, не поддерживающих перекодировку), я получаю эту ошибку:
Ошибка: EILSEQ, недопустимая последовательность символов.
Я открыт для использования любого решения, которое может быть реализовано в nodejs, но мои результаты поиска не дали много опций за пределами модуля nodejs-iconv.
nodejs-iconv ref: https://github.com/bnoordhuis/node-iconv
Спасибо!
Изменить 24.06.2011:
Я пошел дальше и реализовал решение на Java. Однако я все еще был бы заинтересован в javascript-решении этой проблемы, если кто-то может решить ее.