对于概念验证,其中 2 个应用程序(用 Flutter 编写并在同一设备上运行(需要交换信息,我使用的是"dart:io"套接字。
两个应用程序中的一个实现套接字服务器来接收信息,另一个初始化套接字通信。
从连接的角度来看,使用以下代码可以正常工作:
服务器代码:
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
这看起来像一个与编码相关的问题,但我还没有能够解决它。
有人知道如何继续工作吗? 谢谢
我找到了解决方案。 在这里:
客户端代码:
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
感谢您的帮助。
在写入数据时应尝试使用ut8.encode
,在另一端读取数据时应尝试使用utf8.decode
。