Связь с флаттером / дротиком, проблема с кодировкой символов - PullRequest
0 голосов
/ 10 февраля 2020

Для подтверждения концепции, когда 2 приложения, написанные на Flutter и работающие на одном устройстве, должны обмениваться информацией, я использую сокеты 'dart: io'.

Одно из 2 приложений реализует SocketServer для получения информации, а другой инициализирует обмен данными через сокеты.

С точки зрения соединения это работает нормально, используя следующий код:

Код сервера:

ServerSocket.bind('127.0.0.1', 8080).then((ServerSocket socketServer) {
    socketServer.listen((Socket socket) {
       socket.listen((List<int> data){
          String result = String.fromCharCodes(data);
          print('received: $result'); 
        });
    });
}).catchError(print);

Код клиента:

Socket.connect('127.0.0.1', 8080).then((socket) {
   String data = 'Les élèves regardent par la fenêtre';
   socket.write(data);
   print("sent: $data");
}).catchError(print);

Однако, когда я пытаюсь отправить строку, содержащую подчеркнутые символы, я получаю следующий результат:

sent: Les élèves regardent par la fenêtre
received: Les élèves regardent par la fenêtre

Это выглядит как проблема, связанная с кодировкой, но я пока не смог ее решить.

Кто-нибудь мог бы представить, как это сделать? Спасибо

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Вы должны попытаться использовать ut8.encode при записи данных и utf8.decode при чтении с другой стороны.

0 голосов
/ 10 февраля 2020

Я нашел решение. Вот он:

Код для клиента:

Socket.connect('127.0.0.1', 8080).then((socket) {
   String data = 'Les élèves regardent par la fenêtre';

   socket.encoding = utf8;   // <== force the encoding
   socket.write(data);
   print("sent: $data");
}).catchError(print);

Код для сервера:

ServerSocket.bind('127.0.0.1', 8080).then((ServerSocket socketServer) {
    socketServer.listen((Socket socket) {
       socket.listen((List<int> data){
          String result = utf8.decode(data);
          print('received: $result'); 
        });
    });
}).catchError(print);

Решение состоит в том, чтобы "принудительно" применить кодировку к utf8

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...