Как конвертировать латиницу в кодировку Ibm на Dart и Flutter? - PullRequest
0 голосов
/ 29 марта 2019

Мое приложение флаттера отправляет строку пользователя в акведук, а в акведуке я использую дартс-сокет для отправки данных на внутренний сервер. В приложении Flutter Mobile я использую http.get с заголовками application / json и использую json.decode для декодирования тела ответа.

  var _response = await http.get(Uri.encodeFull("$_socketCon"),
      headers: {'Accept': 'application/json'});
  if (_response.statusCode == 200) {
    var _resBody = await json.decode(_response.body);

В акведуке я использую socket.write и использую String.fromCharCodes (data) для возврата данных из сокета в мобильное приложение.

_socket = await Socket.connect('192.168.22.120', 3000);
        _socket.write('$mobileData\r\n');

_reply = new String.fromCharCodes(data);

В мобильном приложении «флаттер» я также использую replaceAll для замены символа, как показано ниже

_socketData = _socketData.replaceAll(new RegExp(r'Ý'), 'I');
_socketData = _socketData.replaceAll(new RegExp(r'ý'), 'i');
_socketData = _socketData.replaceAll(new RegExp(r'Ð'), 'G');
_socketData = _socketData.replaceAll(new RegExp(r'ð'), 'g');

Позже я узнаю, что сервер (сокет) использует некоторое преобразование, как показано ниже. Если мобильное приложение flutter отправляет строку со значением chr (208), сокет сервера заменяется на chr (166).

Данные

sLatin: 
string = 'CHR(208)||CHR(220)||CHR(222)||CHR(221)||CHR(214);


sIbm: 
string = 'CHR(166)||CHR(154)||CHR(158)||CHR(152)||CHR(153)';

mobil to socket
        if cHarf = chr(208) then cHarf := chr(166) // Ğ
        else
        if cHarf = chr(220) then cHarf := chr(154) // Ü
        else
        if cHarf = chr(222) then cHarf := chr(158) // Ş
        ...
        ...

Мне нужно аналогичное преобразование из флаттера в сокет и из сокета в флаттер.

Как преобразовать латиницу в кодировку Ibm на Dart и Flutter?
Или как использовать подобное преобразование символов в дротике или флаттере?

Обновление:

Я пытаюсь превратить символы в байты, как показано ниже, но не соответствует типу ibm. Ibm char (240) будет преобразован в латинский char (167). Выходные данные даже не совпадают.

  List<String> letters = [ 'c', 'ç', 'g', 'ğ', 'ı', 'i', 'o', 'ö', 's', 'ş', 'u', 'ü' ];
  for (num i=1; i < 12; i++) {
    var bytes = utf8.encode(letters[i].toString());
    print(bytes) ;
  }

выход:

[195, 167]
[103]
[196, 159]
[196, 177]
[105]
[111]
[195, 182]
[115]
[197, 159]
[117]
[195, 188]

Update-2;

Я также нашел их, но я не уверен, как преобразовать в шестнадцатеричный или UTF8, как показано ниже

Вот некоторые коды символов в шестнадцатеричном формате и как они кодируются в UTF-8:

      Ç     ç     Ğ     ğ     İ     ı     Ö     ö     Ş     ş     Ü     ü
Code: 00c7  00e7  011e  011f  0130  0131  00d6  00f6  015e  015f  00dc  00fc
UTF8: c3 87 c3 a7 c4 9e c4 9f c4 b0 c4 b1 c3 96 c3 b6 c5 9e c5 9f c3 9c c3 bc
...