【问题标题】: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。

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多