Quando un server invia byte UTF-8, come vengono letti senza che i caratteri diventino byte puri? (\ x40 ecc.)In Ruby, Come leggere UTF-8 da un socket?
risposta
credo read_nonblock
utilizza read
, che a sua volta dice:
La stringa risultato è sempre la codifica ASCII-8BIT.
Il che significa che non è necessario specificare IO#set_encoding
, ma che si può, dopo aver letto tutta la stringa, forzare la sua codifica (usando String#force_encoding!
) per UTF-8
.
Ho sottolineato "intero", poiché è necessario assicurarsi di leggere l'intero carattere Unicode alla fine della stringa, come se fosse letto solo una parte, si otterrà il carattere UTF-8 non valido e Ruby potrebbe lamentarsi su di esso più in basso.
È possibile utilizzare IO#set_encoding per impostare la codifica esterna di un socket su 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"
Sarebbe IO # set_encoding funzionare se sto leggendo i byte di un socket uno alla volta con #read_nonblock? – lcarpenter
@lcarpenter, non vedo perché no. Hai provato e trovato che non lo fa? –
Ah, no, questo metodo non funziona abbastanza – lcarpenter
- 1. Come leggere i byte da un socket in Haskell
- 2. Lettura/scrittura da un socket Unix in Ruby
- 3. Come leggere da una presa TCPServer in Ruby utilizzando leggere, readpartial e read_nonblock
- 4. Nessun altro dato da leggere dall'errore socket
- 5. posso leggere esattamente un pacchetto UDP da un socket?
- 6. Come convertire una stringa in UTF8 in Ruby
- 7. Come creare un socket SSL bidirezionale in Ruby
- 8. Ruby caratteristiche prestazioni socket
- 9. java: come convertire un file in utf8
- 10. Come leggere il file con codifica UTF8 utilizzando RandomAccessFile?
- 11. Come leggere dal socket usando datainputstream
- 12. Come leggere l'intero file in Ruby?
- 13. Continua a leggere da STDOUT del processo esterno in Ruby
- 14. Qual è il modo corretto di leggere da un socket TCP in C/C++?
- 15. Come export csv da MySQL utf8
- 16. Come posso leggere da Redis all'interno di un blocco MULTI in Ruby?
- 17. StreamReader da MemoryStream UTF8 Encoding
- 18. Ruby: come posso leggere un file CSV che contiene due intestazioni in Ruby?
- 19. Leggere la prima riga di un file in Ruby
- 20. C++ read() - da un socket a un ofstream
- 21. Come leggere da GZIPInputstream
- 22. Come posso creare una stringa da UTF8 in Swift?
- 23. C# UTF8 Lettura/emissione
- 24. file di utf8 Benchmarking leggere - spiegazione delle differenze
- 25. Come leggere i bit da un file?
- 26. Come leggere un'immagine da phantomjs stdout in nodejs per servirla?
- 27. Come leggere il contenuto del file da un file?
- 28. Come leggere app.config da un altro assembly?
- 29. Posso leggere da un socket in modo sincrono utilizzando Boost.Asio con un timeout su un servizio I/O con multithreading?
- 30. Come posso creare un 'ostream' da un socket?
Come si legge la presa? – Reactormonk
Una combinazione di IO :: select() e IO # read_nonblock – lcarpenter