Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Ruby中通过TcpSocket发送UTF-8编码的字符串_Ruby_Sockets_Encoding_Character Encoding - Fatal编程技术网

如何在Ruby中通过TcpSocket发送UTF-8编码的字符串

如何在Ruby中通过TcpSocket发送UTF-8编码的字符串,ruby,sockets,encoding,character-encoding,Ruby,Sockets,Encoding,Character Encoding,如何在Ruby中通过TcpSocket发送UTF-8编码的字符串?当我尝试使用以下代码时 msg = $stdin.gets.chomp @server.puts(msg.encode('utf-8')) 它为我提供了服务器上的“ASCII-8BIT”编码: msg = client.gets.chomp puts msg.encoding 输出 ASCII-8BIT 为什么??我做错了什么?通过连接发送的数据只是组成字符串的原始字节,而不是客户端与之关联的编码。因此,服务器无法确定编码应该

如何在Ruby中通过
TcpSocket
发送UTF-8编码的字符串?当我尝试使用以下代码时

msg = $stdin.gets.chomp
@server.puts(msg.encode('utf-8'))
它为我提供了服务器上的“ASCII-8BIT”编码:

msg = client.gets.chomp
puts msg.encoding
输出

ASCII-8BIT


为什么??我做错了什么?

通过连接发送的数据只是组成字符串的原始字节,而不是客户端与之关联的编码。因此,服务器无法确定编码应该是什么,默认为
ASCII-8BIT
,这实际上意味着未知

如果您知道数据将始终为UTF-8,则可以在套接字上使用,始终将接收到的数据标记为正确的编码:

client.set_encoding('UTF-8')
msg = client.gets.chomp
如果数据可能与每个客户机采用不同的编码,则需要制定一些协议,客户机在发送实际数据之前告诉服务器该编码是什么。然后,服务器可以如上所述使用
set_encoding
,或者对结果字符串使用