Kiedy serwer wysyła bajty w formacie UTF-8, jak czytasz je bez znaków, które stają się czystymi bajtami? (\ x40 itd.)W języku Ruby, Jak odczytać kodowanie UTF-8 z gniazda?
Odpowiedz
wierzę read_nonblock
wykorzystuje read
, co z kolei mówi:
Otrzymany ciąg jest zawsze kodowania ASCII 8BIT.
Co oznacza, że nie trzeba określać IO#set_encoding
, ale że można, po przeczytaniu cały łańcuch, życie jego kodowanie (używając String#force_encoding!
) do UTF-8
.
Podkreśliłem "cały", ponieważ musisz upewnić się, że czytasz cały znak Unicode na końcu łańcucha, tak jakby przeczytano tylko jego część, otrzymasz nieprawidłowy znak UTF-8, a Ruby może narzekać o tym dalej.
Możesz użyć IO#set_encoding, aby ustawić zewnętrzne kodowanie gniazda na 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"
Czy funkcja IO # set_encoding działa, jeśli czytam bajty off gniazda jeden po drugim z #read_nonblock? – lcarpenter
@lcarpenter, nie rozumiem, dlaczego nie. Czy próbowałeś go i okazało się, że tak nie jest? –
Ach, nie, ta metoda nie działa poprawnie – lcarpenter
- 1. Kodowanie UTF8 z NSString
- 2. Kodowanie knitr i UTF8
- 3. Kodowanie Eclipse MacRoman -> UTF8
- 4. java kodowanie utf8 - char, typy łańcuchowe
- 5. Szyny: kodowanie problemów z serializowanymi hasłami pomimo UTF8
- 6. Jak przekonwertować kodowanie Mysql utf8 do utf8mb4 w projekcie Railsy
- 7. Jak dodać kodowanie UTF8 do obsługi nieangielskojęzycznej w JavaFX?
- 8. Kodowanie znaków w języku Ruby przy użyciu Base64.encode
- 9. Jak utworzyć klienta gniazda sieciowego w Ruby?
- 10. jak przekonwertować kodowanie znaków z ruby 1.9
- 11. Jak utworzyć transakcję SWIG z ciągami utf8 w języku C#?
- 12. Jak wyświetlić prawidłowe kodowanie Iconv w Ruby?
- 13. Jak CSV eksport z MySQL utf8
- 14. Kodowanie wszystkich nie alfabetycznych w języku C#
- 15. Jak przekonwertować ciąg znaków na UTF8 w Ruby
- 16. Jak odczytać plik XML w języku C#?
- 17. Jak mogę odczytać hasło z wiersza poleceń w Ruby?
- 18. Jak odczytać klucz prywatny z pliku Pvk w języku C#?
- 19. Gramatyka w języku Ruby "&& ="
- 20. Ruby - kod źródłowy - kodowanie styl
- 21. Stronicowanie tablicę w języku Ruby z will_paginate
- 22. Kodowanie HTML tekstu w języku japońskim
- 23. kodowanie jest ignorowane w fs.readFile
- 24. Kodowanie Base64 w języku Java/Groovy
- 25. Co to jest kodowanie w języku XML?
- 26. W języku Ruby, jak działa funkcja Coerce()?
- 27. Jak zamienić pętlę for w języku Ruby?
- 28. Howto do SQL Server utf8?
- 29. Ruby: Fuzzowanie wszystkich znaków Unicode (kodowanie UTF/kodowanie/ciąg)
- 30. Złe kodowanie podczas korzystania z strftime w języku hiszpańskim?
Jak czytasz gniazdo? – Reactormonk
Kombinacja funkcji IO :: select() i IO # read_nonblock – lcarpenter