यह जांचने के लिए कि क्या चरित्र सेट utf-8 एन्कोडिंग में है, ruby | ror के माध्यम से?यह जांचने के लिए कि क्या चरित्र utf-8
उत्तर
वहाँ रूबी में और न ही कहीं और इस, ऐसा करने के लिए कोई निश्चित तरीका है:
str = 'foo' # start with a simple string
# => "foo"
str.encoding
# => #<Encoding:UTF-8> # which is UTF-8 encoded
str.bytes.to_a
# => [102, 111, 111] # as you can see, it consists of three bytes 102, 111 and 111
str.encode!('us-ascii') # now we will recode the string to 8-bit us-ascii encoding
# => "foo"
str.encoding
# => #<Encoding:US-ASCII>
str.bytes.to_a
# => [102, 111, 111] # see, same three bytes
str.encode!('windows-1251') # let us try some cyrillic
# => "foo"
str.encoding
# => #<Encoding:Windows-1251>
str.bytes.to_a
# => [102, 111, 111] # see, the same three again!
बेशक
, आप कुछ सांख्यिकीय उपयोग कर सकते हैं पाठ पर विश्लेषण, और एन्कोडिंग को खत्म करें जो पाठ मान्य नहीं है, लेकिन सैद्धांतिक रूप से, यह हल करने योग्य समस्या नहीं है।
"यह करने के लिए कोई निश्चित तरीका नहीं है, रुबी में और न ही कहीं और", आह, यूनिकोड युद्धों के एक उत्तेजित सोल्डर की तरह कहा। वहां गया, ऐसा किया, मुझे तुम्हारा दर्द महसूस होता है। :-) मैं पाठ के सांख्यिकीय विश्लेषण पर भी वापस आ गया, जो कि ज्यादातर समय काम करता था। यह आश्चर्यजनक है कि एचटीएमएल, आरएसएस और एक्सएमएल कितनी बुरी तरह टूट सकती है जब कोई चश्मे के संबंध में चीजों को काम करने के लिए निर्धारित होता है। –
[स्ट्रिंग # valid_encoding?] (Http://ruby-doc.org/core-2.1.0/String.html#method-i-valid_encoding-3F) के बारे में क्या? उदाहरण: '"आंशिक वैध \ xE4 यूटीएफ -8 एन्कोडिंग: äöüß"। Valid_encoding? ' –
' valid_encoding?' जांचता है कि किसी स्ट्रिंग में अमान्य बाइट अनुक्रम हैं या नहीं। यह नहीं कहता है कि (अन्यथा मान्य) बाइट अनुक्रम कुछ एन्कोडिंग से निकलता है, और मेरा मानना है कि यह सवाल था। –
"your string".encoding
# => #<Encoding:UTF-8>
या आप यह progmatically चाहते हैं,
"your string".encoding.name == "UTF-8"
# => true
यह केवल स्ट्रिंग ऑब्जेक्ट पर एन्कोडिंग सेट की जांच करता है, न कि इसकी सामग्री के वास्तविक एन्कोडिंग। इस बात की कोई गारंटी नहीं है कि वास्तविक सामग्री उसी एन्कोडिंग का उपयोग करके एन्कोड किया गया है। –
चेक UTF-8 वैधता
सबसे मल्टी-बाइट एन्कोडिंग के लिए यह प्रोग्राम के रूप में अवैध बाइट-दृश्यों का पता लगाने के लिए संभव है। रूबी के रूप में डिफ़ॉल्ट व्यवहार करता है के द्वारा सभी स्ट्रिंग्स UTF-8
होने के लिए आपको देख सकते हैं कि एक स्ट्रिंग वैध UTF-8
में दी गई है:,
इसके अतिरिक्त
# encoding: UTF-8
# -------------------------------------------
str = "Partly valid\xE4 UTF-8 encoding: äöüß"
str.valid_encoding?
# => false
str.scrub('').valid_encoding?
# => true
Convert एन्कोडिंग अगर एक स्ट्रिंग वैध UTF-8
एन्कोडिंग नहीं है, लेकिन क्या आप जानते हैं वास्तविक वर्ण-एन्कोडिंग, आप स्ट्रिंग को UTF-8
एन्कोडिंग में परिवर्तित कर सकते हैं।
उदाहरण
कभी कभी, आप एक स्थिति है, जिसमें आप जानते हैं कि एक इनपुट-फ़ाइल की एन्कोडिंग या तो UTF-8
या CP1252
(यानी Windows-1252
) है में समाप्त।
चेक जो यह एन्कोडिंग और UTF-8 (यदि आवश्यक हो) में बदलने का:
# encoding: UTF-8
# ------------------------------------------------------
test = "String in CP1252 encoding: \xE4\xF6\xFC\xDF"
File.open('input_file', 'w') {|f| f.write(test)}
str = File.read('input_file')
unless str.valid_encoding?
str.encode!('UTF-8', 'CP1252', invalid: :replace, undef: :replace, replace: '?')
end #unless
# => "String CP1252 encoding: äöüß"
=======
नोट्स
यह पता लगाने के लिए प्रोग्राम के रूप में संभव है बहुत अधिक विश्वसनीयता के साथ यूटीएफ -8 (रूबी, see: #valid_encoding?) में अधिकांश बहु-बाइट एन्कोडिंग। केवल 16 बाइट्स के बाद, एक यादृच्छिक बाइट-अनुक्रम की संभावना वैध यूटीएफ -8 is only 0.01% है। (UTF-8 BOM पर निर्भर के साथ इसकी तुलना)
हालांकि, यह आसानी से संभव नहीं है प्रोग्राम के रूप में (में)
CP1252
याISO-8859-1
की तरह एकल-बाइट-एनकोडिंग की वैधता का पता लगाने के। इस प्रकार उपर्युक्त कोड स्निपेट दूसरी तरफ काम नहीं करता है, यानी यह पता लगाना कि क्या स्ट्रिंग मान्य हैCP1252
एन्कोडिंग।हालांकि UTF-8 वेब,
CP1252
और अन्यLatin1
जायके विशेष रूप से उत्तरी अमेरिका में, पश्चिमी देशों में बहुत लोकप्रिय अभी भी कर रहे हैं में डिफ़ॉल्ट एन्कोडिंग के रूप में तेजी से लोकप्रिय हो गया है। ध्यान रखें कि वहां कई सिंगल-बाइट एन्कोडिंग हैं जो बहुत समान हैं, लेकिनCP1252
(ए.के.ए.Windows-1252
) से थोड़ा अलग है।उदाहरण:ISO-8859-1
,ISO-8859-15
'" सीपी 1252 एन्कोडिंग में स्ट्रिंग: \ xE4 \ xF6 \ xFC \ xDF "मुझे विश्वास है कि सवाल यह था कि आप इसे सीपी 1252 एन्कोडिंग_ में कैसे देखते हैं। –
मैंने सोचा, सवाल यह था कि यदि दिया गया स्ट्रिंग (वैध) 'यूटीएफ -8' एन्कोडिंग में है या नहीं। आप 'स्ट्रिंग' str' पर 'str.valid_encoding?' को कॉल करके ऐसा करते हैं जो 'UTF-8'-एन्कोडिंग में है। क्या यह मेरे उत्तर से स्पष्ट नहीं है? –
प्रोग्रामेटिक रूप से, आप (या कम से कम आसानी से और निश्चित रूप से विश्वसनीय नहीं हैं) एक स्ट्रिंग की अमान्यता को एक-बाइट-एन्कोडिंग जैसे 'CP1252' में जांच सकते हैं। हालांकि, आप बहुत भरोसेमंद (स्ट्रिंग की लंबाई के आधार पर) एक बहु-बाइट-एन्कोडिंग जैसे 'यूटीएफ -8'' में स्ट्रिंग की अमान्यता की जांच कर सकते हैं। –
- 1. यह जांचने के लिए कि क्या चरित्र एक पूर्णांक
- 2. यह जांचने के लिए कि क्या PKAddPassesViewController
- 3. यह जांचने के लिए कि .NET 4.0
- 4. यह जांचने के लिए कि बैश स्क्रिप्ट
- 5. यह जांचने के लिए कि जावास्क्रिप्ट सरणी
- 6. यह जांचने के लिए कि वर्डप्रेस
- 7. यह जांचने के लिए कि फ़ाइल
- 8. यह जांचने के लिए कि क्या XMLHttpRequest भेजता है() फ़ाइल
- 9. यह जांचने के लिए कि क्या ऑब्जेक्ट जेएसओएन स्ट्रिंग
- 10. यह जांचने के लिए कि क्या GUID शून्य है
- 11. यह जांचने के लिए कि क्या एनएसपीओटी एनएसआरईटी
- 12. यह जांचने के लिए कि क्या सभी आइटम LINQ
- 13. यह जांचने के लिए कि क्या तत्व वर्तमान में
- 14. यह जांचने के लिए कि क्या EXE को LARGEADDRESSAWARE
- 15. यह जांचने के लिए कि क्या गिट स्थापित है .bashrc
- 16. मैं चरित्र की तुलना कैसे कर सकता हूं यह जांचने के लिए कि यह शून्य है या नहीं?
- 17. रेगेक्स यह जांचने के लिए कि कोई संख्या
- 18. यह जांचने के लिए कि कोई सेवा कमांड लाइन
- 19. यह जांचने के लिए कि कोई एफ़टीपी निर्देशिका मौजूद है
- 20. यह जांचने के लिए कि java.lang.reflect.Type एक Enum
- 21. यह जांचने के लिए बिट करें कि कोई संख्या
- 22. यह जांचने के लिए कि फ़ाइल बाइनरी है या नहीं?
- 23. यह जांचने के लिए क्वेरी कि एक MYSQL तालिका
- 24. यह जांचने के लिए कि कोई कंप्यूटर C#
- 25. सी # - यह जांचने के लिए कि कोई उदाहरण उसके प्रकार
- 26. यह जांचने के लिए कि मेरा एप्लिकेशन डिफ़ॉल्ट लॉन्चर
- 27. यह जांचने के लिए कि कोई ऑब्जेक्ट किसी निश्चित प्रकार
- 28. यह जांचने के लिए कि एंड्रॉइड "मोबाइल डेटा"
- 29. यह जांचने के लिए कि JCheckBox चेक किया गया है?
- 30. यह जांचने के लिए कि कोई int एक शून्य है
आप अगर आप पहले से ही सही एन्कोडिंग के साथ स्मृति में स्ट्रिंग है, या आप क्या मतलब है इससे पहले कि आप भी स्मृति में स्ट्रिंग को पढ़ने के लिए शुरू (जैसे कि, डिस्क पर एक फ़ाइल से) मतलब है ? – d11wtq