如何通过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
为什么呢?我做错了什么?
答案 0 :(得分:1)
通过连接发送的数据只是构成字符串的原始字节,而不是客户端与它们关联的编码。因此,服务器无法确定编码应该是什么,默认为ASCII-8BIT
,这实际上意味着未知。
如果您知道数据始终为UTF-8,则可以使用套接字上的set_encoding
始终将接收的数据标记为正确的编码:
client.set_encoding('UTF-8')
msg = client.gets.chomp
如果数据可能与每个客户端的编码不同,则需要制定一些协议,客户端在发送实际数据之前告诉服务器该编码是什么。然后,服务器可以使用上面的set_encoding
,或者在结果字符串上使用force_encoding
。