颤振/飞镖套接字通信,字符编码问题



对于概念验证,其中 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

最新更新