如何在 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,则可以使用 set_encoding
在套接字上始终将接收到的数据标记为正确的编码:
client.set_encoding('UTF-8')
msg = client.gets.chomp
如果每个客户端的数据可能采用不同的编码,您将需要制定一些协议(protocol),客户端在发送实际数据之前告诉服务器该编码是什么。然后服务器可以像上面一样使用set_encoding
,或者使用 force_encoding
在结果字符串上。
关于ruby - 如何在 Ruby 中通过 TcpSocket 发送 UTF-8 编码的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303943/