Как принудительно использовать кодировку Latin-1 вместо UTF-16 для строк в JavaScript?

У меня есть проект, использующий Node.JS. Мне нужно отправить строку на терминал (UART COM-порт) на латинице1. Я только что понял, что не могу создать объект String с 1-байтовой кодировкой (например, Latin-1).

Мне нужно создать строку из массива байтов. Байты, которые меньше 128, являются байтами ASCII, и строка с этими байтами всегда выглядит хорошо. Но если я передаю байты больше 127, я всегда получаю строку с 2 байтами (в UTF-16).

Мне действительно нужно только 1-байтовое представление каждого байта. Как я могу этого добиться?


person Michael Sivolobov    schedule 06.11.2014    source источник
comment
Возможный дубликат проблем с кодировкой при записи на консоль в узле .js   -  person nwellnhof    schedule 25.11.2015
comment
@nwellnhof, это не та проблема. В вопросе, на который вы ссылались, проблема связана с внешним видом вывода. Но в моем вопросе мне нужно получить объект String в 1-байтовой кодировке.   -  person Michael Sivolobov    schedule 25.11.2015
comment
Вы не можете изменить кодировку строк JavaScript. Вам понадобится API, который принимает байтовые массивы.   -  person nwellnhof    schedule 25.11.2015
comment
Один из моих программистов как-то решил эту проблему. Я действительно забыл добавить его решение здесь. Но в приложении теперь все работает нормально.   -  person Michael Sivolobov    schedule 25.11.2015


Ответы (1)


IconV может работать

Что-то вроде (непроверенный код!):

  var Buffer = require('buffer').Buffer;
  var Iconv  = require('iconv').Iconv;

  var iconv = new Iconv('UTF-16','latin1');

  bytes.forEach(function(byte){
      var bufferbyte = iconv.convert(byte);
  });
person ztripez    schedule 06.11.2014
comment
Я пытался использовать iconv, но возникла проблема: ни один метод не вернет строку в нужной кодировке. Только байтовое представление. Мне нужно отправить строку на терминал в latin1. Эта библиотека не может помочь здесь. - person Michael Sivolobov; 10.11.2014