मैटज़ ने अपनी पुस्तक में लिखा कि यूटीएफ -8 का उपयोग करने के लिए, आपको अपनी स्क्रिप्ट की पहली पंक्ति पर कोडिंग टिप्पणी जोड़नी होगी।क्या यूटीएफ -8 रूबी v.2 में डिफ़ॉल्ट एन्कोडिंग है?
# -*- coding: utf-8 -*- # Specify Unicode UTF-8 characters
# This is a string literal containing a multibyte multiplication character
s = "2x2=4"
# The string contains 6 bytes which encode 5 characters
s.length # => 5: Characters: '2' 'x' '2' '=' '4'
s.bytesize # => 6: Bytes (hex): 32 c3 97 32 3d 34
जब वह bytesize
invokes, यह रिटर्न 6
के बाद से गुणा प्रतीक ×
ascii सेट के बाहर है, और दो बाइट्स के साथ यूनिकोड द्वारा प्रतिनिधित्व किया जाना चाहिए: वह हमें एक उदाहरण देता है।
मैं व्यायाम करने की कोशिश की और कोडिंग टिप्पणी निर्दिष्ट किए बिना, यह दो बाइट्स के रूप में गुणा प्रतीक मान्यता प्राप्त:
'×'.encoding
=> #<Encoding:UTF-8>
'×'.bytes.to_a.map {|dec| dec.to_s(16) }
=> ["c3", "97"]
तो ऐसा लगता है utf-8 डिफ़ॉल्ट एन्कोडिंग है। क्या यह रूबी 2 के लिए हालिया जोड़ा है? उनके उदाहरण रुबी 1.9 से थे।
यह भी दिलचस्प है कि वह कहता है: "एक स्ट्रिंग अक्षर का एन्कोडिंग उस फ़ाइल के स्रोत एन्कोडिंग पर आधारित होता है जो फ़ाइल में दिखाई देता है। लेकिन इसका एन्कोडिंग हमेशा स्रोत एन्कोडिंग के समान नहीं होता है। यदि स्ट्रिंग अक्षर में केवल 7 एएससीआईआई अक्षरों के बीच, फिर एन्कोडिंग विधि एएससीआईआई वापस कर देगी, भले ही स्रोत एन्कोडिंग यूटीएफ -8 है "। यह अब या तो सत्य नहीं है: 2.2.0: 033>? एच। एन्कोडिंग => # <एन्कोडिंग: यूटीएफ -8> 'ए'एनकोडिंग => # <एन्कोडिंग: यूटीएफ -8> – Donato
अजीब लेकिन: $ रूबी -v' 'ruby 2.0.0p648 (2015-12-16 संशोधन 53162) [universal.x86_64-darwin16]' 'ruby -e" p /asd/.encoding "' '# <एन्कोडिंग: यूएस-ASCII>' – Nakilon