length() के लिए perldoc
पृष्ठ मुझे बताता है कि मुझे बाइट्स में यूनिकोड स्ट्रिंग खोजने के लिए bytes::length(EXPR)
का उपयोग करना चाहिए, या bytes पृष्ठ इसे इकोज़ करता है।पर्ल में यूनिकोड स्ट्रिंग की लंबाई मुझे कैसे मिल सकती है?
ASCII: 26
ASCII bytes: 26
Unicode: 35
Unicode bytes: 35
ऐसा लगता है मेरे लिए लंबाई() और बाइट्स :: लंबाई() दोनों ASCII & यूनिकोड तार के लिए एक ही लौट:
use bytes;
$ascii = 'Lorem ipsum dolor sit amet';
$unicode = 'Lørëm ípsüm dölör sît åmét';
print "ASCII: " . length($ascii) . "\n";
print "ASCII bytes: " . bytes::length($ascii) . "\n";
print "Unicode: " . length($unicode) . "\n";
print "Unicode bytes: " . bytes::length($unicode) . "\n";
इस स्क्रिप्ट के उत्पादन में, हालांकि, मैनपेज से सहमत नहीं । मेरे संपादक ने डिफ़ॉल्ट रूप से फ़ाइलों को यूटीएफ -8 के रूप में लिखने के लिए सेट किया है, इसलिए मुझे लगता है कि पर्ल पूरी स्क्रिप्ट को यूनिकोड के रूप में व्याख्या कर रहा है-क्या इसका मतलब है लंबाई() स्वचालित रूप से यूनिकोड स्ट्रिंग को सही तरीके से संभालती है?
संपादित करें: मेरी टिप्पणी देखें; मेरा प्रश्न पूरी तरह से समझ में नहीं आता है, क्योंकि लंबाई() उपर्युक्त उदाहरण में "ठीक से" काम नहीं कर रहा है - यह बाइट्स में यूनिकोड स्ट्रिंग की लंबाई दिखा रहा है, वर्णों में नहीं। जिस मूल रूप से मैं मूल रूप से इस पर ठोकर खा रहा हूं वह एक प्रोग्राम के लिए है जिसमें मुझे एक HTTP संदेश में सामग्री-दसवीं शीर्षलेख (बाइट्स में) सेट करने की आवश्यकता है। मैंने पर्ल में यूनिकोड पर पढ़ा था और चीजों को काम करने के लिए कुछ फंतासी करने की उम्मीद थी, लेकिन जब लंबाई() ने बिल्कुल ठीक किया जो मुझे बल्ले के अधिकार की ज़रूरत थी, तो मैं उलझन में था! use utf8
, use bytes
, और no bytes
पर पर्ल में एक सिंहावलोकन के लिए स्वीकृत उत्तर देखें।
मुझे नहीं लगता कि आप क्यों कहते हैं कि लंबाई() यूनिकोड स्ट्रिंग को ठीक से संभालती है। आपके उदाहरण की लंबाई() में बाइट्स :: लंबाई() के समान परिणाम मिलता है, यह बाइट्स की संख्या है, न कि वर्णों की संख्या (जो उचित होगा)। – Inshallah
दूसरे शब्दों में, लंबाई ($ यूनिकोड) स्ट्रिंग को ASCII के रूप में व्याख्या कर रही है, न कि यूनिकोड के रूप में। – Inshallah
आप बिल्कुल सही हैं! मैंने इस तथ्य को पूरी तरह से अनदेखा कर दिया था- मेरे प्रोग्राम में, मैं एक HTTP संदेश में सामग्री-लंबाई शीर्षलेख सेट करने के लिए लंबाई() का उपयोग कर रहा हूं, जिसे बाइट्स में होना आवश्यक है। लम्बाई() दस्तावेज़ पढ़ने के बाद, मैं उस फ़ंक्शन को कुछ गलत करने की उम्मीद कर रहा था, लेकिन वास्तव में यह वास्तव में वही है जब मैं चाहता हूं कि पर्ल 'बाइट्स मोड' मोड में है: अक्षरों की बजाय बाइट्स में यूनिकोड स्ट्रिंग की लंबाई। –