ruby - 在 Ruby 中,如何从套接字读取 UTF-8?

标签 ruby sockets utf-8

当服务器发送 UTF-8 字节时,如何在不让字符变成纯字节的情况下读取它们? (\x40 等)

最佳答案

您可以使用 IO#set_encoding将套接字的外部编码设置为 UTF-8。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'socket'

server_socket = TCPServer.new('localhost', 0)
Thread.new do
  loop do
    session_socket = server_socket.accept
    session_socket.set_encoding 'ASCII-8BIT'  
    session_socket.puts "  ᚁ ᚂ ᚃ ᚄ ᚅ ᚆ ᚇ ᚈ ᚉ ᚊ ᚋ ᚌ ᚍ"
    session_socket.close
  end
end

client_socket = TCPSocket.new('localhost', server_socket.addr[1])
client_socket.set_encoding 'UTF-8'
p client_socket.gets
# => "|  ᚁ ᚂ ᚃ ᚄ ᚅ ᚆ ᚇ ᚈ ᚉ ᚊ ᚋ ᚌ ᚍ\n"

关于ruby - 在 Ruby 中,如何从套接字读取 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11225841/

相关文章:

ruby - 为什么 local_variables 会返回尚未分配的局部变量?

ruby - 从流 block 写入文件

java - 我的 WebSocket 没有按预期工作;服务器用 Java 实现,客户端用 JavaScript

php - 针对给定单词周围的 N 个单词优化正则表达式 (UTF-8)

mysql - 由于关系,DataMapper 无法删除记录

ruby - Mongoid:检索所有嵌入文档

Python:简单的服务器和 while 循环效率

Java 客户端/服务器发送或获取 int 或 string 类型

c - SO_BINDTODEVICE Linux 套接字选项的问题

PHP:带有特殊字符的 chr 函数问题