【问题标题】:How to send a UTF-8 encoded strings via TcpSocket in Ruby如何在 Ruby 中通过 TcpSocket 发送 UTF-8 编码的字符串
【发布时间】:2014-08-14 08:52:57
【问题描述】:
如何在 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
sockets
encoding
character-encoding
【解决方案1】:
通过连接发送的数据只是构成字符串的原始字节,而不是客户端与它们关联的编码。因此,服务器无法确定编码应该是什么,并且默认为ASCII-8BIT,这实际上意味着未知。
如果您知道数据将始终为 UTF-8,您可以在套接字上使用 set_encoding 始终将接收到的数据标记为正确的编码:
client.set_encoding('UTF-8')
msg = client.gets.chomp
如果每个客户端的数据可能采用不同的编码,您将需要制定一些协议,让客户端在发送实际数据之前告诉服务器该编码是什么。然后服务器可以像上面一样使用set_encoding,或者在结果字符串上使用force_encoding。