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

时间:2014-08-14 08:52:57

标签: 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

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

1 个答案:

答案 0 :(得分:1)

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

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

client.set_encoding('UTF-8')
msg = client.gets.chomp

如果数据可能与每个客户端的编码不同,则需要制定一些协议,客户端在发送实际数据之前告诉服务器该编码是什么。然后,服务器可以使用上面的set_encoding,或者在结果字符串上使用force_encoding