Кордова розетки отправляют Unicode - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть устаревший сервер Windows TCP, к которому мы не можем прикоснуться, он построен с использованием Powerbuilder 10.5 (http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc37774.1252/html/apptech/apptech_unicodesupport.htm) который, согласно приведенной выше ссылке Sybase, ожидает строки Unicode (UTF-16LE) и нуждается в небольшом мобильном приложении, которое отправляет на этот сервер простую строку.

Обнаружен Cordova и плагин https://github.com/kitolog/sockets-for-cordova Создал демонстрационное приложение, но оно работает только с ANSI.

Это пример кода с домашней страницы плагина

var dataString = "Hello world";
var data = new Uint8Array(dataString.length);
for (var i = 0; i < data.length; i++) {
  data[i] = dataString.charCodeAt(i);
}
socket.write(data);

Только для целей отладки, сервер имеет возможность получать ANSI. Мы включили эту опцию, и приложение Cordova работает нормально.

Есть идеи или предложения?

1 Ответ

0 голосов
/ 09 апреля 2019

Благодаря UTF-8 и UTF-16LE Javascript , решение:

var byteArray = new Uint8Array(text.length * 2);
for (var i = 0; i < text.length; i++) {
    byteArray[i*2] = text.charCodeAt(i) // & 0xff;
    byteArray[i*2+1] = text.charCodeAt(i) >> 8 // & 0xff;
}
...