Cuando un servidor envía bytes UTF-8, ¿cómo los lee sin que los caracteres se conviertan en bytes puros? (\ x40 etc.)En Ruby, ¿cómo leer UTF-8 desde un socket?
Respuesta
creo read_nonblock
utiliza read
, que a su vez dice:
La cadena resultado es siempre ASCII-8BIT codificación.
Lo que significa que no es necesario especificar IO#set_encoding
, pero que se puede, después de leer toda cadena, forzar su codificación (usando String#force_encoding!
) a UTF-8
.
Destaqué 'todo', ya que necesita asegurarse de leer todo el carácter Unicode al final de la cadena, como si solo se lea una parte, obtendrá un carácter UTF-8 no válido y Ruby podría quejarse sobre eso más adelante en la línea.
Puede usar IO#set_encoding para establecer la codificación externa de un socket en 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"
¿Funcionaría IO # set_encoding si estoy leyendo los bytes de un socket uno a uno con #read_nonblock? – lcarpenter
@lcarpenter, no veo por qué no. ¿Lo has probado y has descubierto que no? –
Ah, no, este método no funciona bien – lcarpenter
- 1. Leer desde el socket
- 2. ¿Cómo crear un socket Boost.Asio desde un socket nativo?
- 3. Cómo leer un archivo abierto en Ruby
- 4. Cómo leer los bytes de un socket en Haskell
- 5. comando bash para leer desde el socket de red?
- 6. No se puede leer desde el socket (bloqueos)
- 7. C++ cómo escribir/leer ofstream en Unicode/UTF8
- 8. ¿Cómo puedo leer un archivo con Ruby?
- 9. Socket leer y escribir simultáneamente
- 10. ¿Cómo creo un cliente de socket web en Ruby?
- 11. ¿Cómo obtener datos hacia/desde un socket en un hilo?
- 12. Cómo usar expresiones regulares para utf8 en ruby
- 13. Leer un archivo en trozos en Ruby
- 14. ¿Cuál es la forma correcta de leer desde un socket TCP en C/C++?
- 15. Conversión de UTF8 a ANSI con Ruby
- 16. ¿Cómo puedo leer desde Redis dentro de un bloque MULTI en Ruby?
- 17. C++ read() - ing desde un socket a un ofstream
- 18. ¿puedo leer exactamente un paquete UDP de un socket?
- 19. ¿Cómo leer todo el archivo en Ruby?
- 20. ¿Cómo puedo crear un 'ostream' desde un socket?
- 21. ¿Cómo leer un archivo de abajo hacia arriba en Ruby?
- 22. ¿Cómo leer el contenido del archivo desde un archivo?
- 23. java: cómo convertir un archivo a utf8
- 24. Leer desde un gran MemoryStream en C#
- 25. Ruby: ¿Cómo cargar un hash desde un archivo?
- 26. Cómo leer un código de barras desde una imagen
- 27. Ir: EOF inesperado al leer de un socket
- 28. ¿Cómo configuro el tiempo de espera del socket en Ruby?
- 29. ¿Cómo servir un socket desde una aplicación Java EE?
- 30. Comportamiento extraño de ruby regex en rieles con utf8 char
¿Cómo se lee el zócalo? – Reactormonk
Una combinación de IO :: select() y IO # read_nonblock – lcarpenter