एक सर्वर UTF-8 बाइट भेजता है, तो आप उन्हें कैसे पात्रों शुद्ध बाइट्स बनने के बिना पढ़ा करते हैं? (\ X40 आदि)रूबी में, सॉकेट से यूटीएफ -8 कैसे पढ़ा जाए?
उत्तर
मेरा मानना है कि read_nonblock
का उपयोग करता read
, जो बारी में कहते हैं:
परिणामस्वरूप स्ट्रिंग हमेशा ASCII-8 बिट एन्कोडिंग है।
आपको लगता है कि आप के बाद आप पढ़ पूरे स्ट्रिंग, इसकी एन्कोडिंग (String#force_encoding!
का प्रयोग करके) UTF-8
करने के लिए मजबूर कर सकते हैं IO#set_encoding
निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन इसका मतलब है।
मैंने 'पूरे' पर जोर दिया, क्योंकि आपको यह सुनिश्चित करने की आवश्यकता है कि आप स्ट्रिंग के अंत में पूरे यूनिकोड चरित्र को पढ़ लें, जैसे कि इसका केवल एक हिस्सा पढ़ा जाए, आपको अमान्य यूटीएफ -8 वर्ण मिलेगा और रुबी शिकायत कर सकता है इसके बारे में लाइन नीचे और नीचे।
आप 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"
चाहेंगे आईओ # set_encoding काम अगर मैं एक सॉकेट एक-एक करके #read_nonblock साथ के बंद बाइट्स पढ़ रहा हूँ? – lcarpenter
@lcarpenter, मुझे नहीं लगता कि क्यों नहीं। क्या आपने कोशिश की है और पाया है कि यह नहीं है? –
आह, नहीं, इस पद्धति काफी – lcarpenter
- 1. यूटीएफ -8 के साथ इनपुटस्ट्रीम कैसे पढ़ा जाए?
- 2. यूटीएफ -8
- 3. यूटीएफ 8 से ASCII
- 4. रूबी: स्वचालित रूप से "# एन्कोडिंग: यूटीएफ -8" कैसे जोड़ें?
- 5. लैटिन से यूटीएफ -8
- 6. यूनिकोडस्ट्रिंग से चार * (यूटीएफ -8)
- 7. यूनिकोड से यूटीएफ -8
- 8. सबडोमेन में यूटीएफ -8?
- 9. विंडोज़ में यूटीएफ -8
- 10. यूटीएफ -8
- 11. यूटीएफ -8
- 12. जेसन से खराब यूटीएफ -8 को संभालना, रूबी
- 13. एक्सएमआई कैसे पढ़ा जाए?
- 14. यूटीएफ -8
- 15. यूटीएफ -8
- 16. यूटीएफ -8
- 17. यूटीएफ -8
- 18. यूटीएफ -8
- 19. यूटीएफ -8
- 20. रुबी में नीचे से ऊपर तक फ़ाइल कैसे पढ़ा जाए?
- 21. सी ++ पढ़ा() - एक सॉकेट से एक ऑफस्ट्रीम
- 22. पियर मेल, यूटीएफ -8
- 23. बिल्कुल एक पंक्ति को कैसे पढ़ा जाए?
- 24. x86_64 असेंबली में STDIN से इनपुट कैसे पढ़ा जाए?
- 25. SQLite डेटाबेस से डेटा कैसे पढ़ा जाए?
- 26. एमपी 3 से मेटाडेटा कैसे पढ़ा जाए?
- 27. रेल: यूटीएफ 8
- 28. NSDocumentDirectory से डेटा को कैसे पढ़ा जाए
- 29. app.config से कस्टम एक्सएमएल कैसे पढ़ा जाए?
- 30. NSUserDefaults से स्ट्रिंग को कैसे पढ़ा जाए
आप सॉकेट कैसे पढ़ूं? – Reactormonk
आईओ का एक संयोजन का चयन ::() और आईओ # read_nonblock – lcarpenter