यहाँ आप त्रुटियों को समझने में मदद करने के लिए दो उदाहरण है:
[email protected]: ~/Milu/Dev/Perl > cat malformed-utf8-char.pl
use utf8; # script source must be in UTF-8
use strict;
use warnings;
print "K�se\n";
[email protected]: ~/Milu/Dev/Perl > perl malformed-utf8-char.pl
Malformed UTF-8 character (unexpected non-continuation byte 0x73,
immediately after start byte 0xe4) at malformed-utf8-char.pl line 4.
Kse
स्रोत लैटिन -1 में है, मेरी टर्मिनल UTF-8 में है। स्ट्रिंग वास्तव में "कास" है। utf8
प्राग्मा को या तो हटा दिया जाना चाहिए, या स्रोत यूटीएफ -8 में सहेजा जाना चाहिए।
[email protected]: ~/Milu/Dev/Perl > cat wide-char-in-print.pl
use utf8;
use strict;
use warnings;
# binmode STDOUT, ':utf8';
print "Группа сайтов РИА Новости\n";
[email protected]: ~/Milu/Dev/Perl > perl wide-char-in-print.pl
Wide character in print at wide-char-in-print.pl line 5.
Группа сайтов РИА Новости
स्रोत सिरिलिक वर्ण हैं, इसलिए utf8
pragma क्रम में है। टर्मिनल में उन वर्णों को मुद्रित करने के लिए, STDOUT
को यूटीएफ -8 पर भी सेट किया जाना चाहिए, जिसे आप binmode
पर कॉल करके प्राप्त कर सकते हैं। यदि आप ऐसा नहीं करते हैं, तो एक चेतावनी एक चौड़ी (0x255 से परे यूनिकोड) के रूप में ट्रिगर की जाती है, चरित्र एक संकीर्ण (बाइट) आउटपुट चैनल के माध्यम से फिट नहीं होता है। यह अभी भी सही दिखाई देगा, क्योंकि पर्ल केवल बाइट्स को आउटपुट के रूप में आउटपुट करेगा, जो तब सही दिखने वाला होता है।
यह सबसे अच्छा जवाब है था क्योंकि नए प्रोग्रामर को 'कष्टप्रद' चेतावनी को बंद करने के बजाय, आपको यह नहीं करना चाहिए कि अगर आपको समझ में नहीं आता कि आप उन्हें क्यों प्राप्त कर रहे हैं, तो यह आपको बताता है कि पहली बार उस चेतावनी को कैसे रोकें। आपकी तरफ से किसी समस्या को ठीक करने में आपकी सहायता के लिए अधिकांश चेतावनियां हैं। मैंने कहीं सुना है कि 99.9 99% समय, प्रोग्रामर, कंप्यूटर/कंपाइलर/दुभाषिया समस्या नहीं है। इस चेतावनी को बंद करना आसान है, लेकिन केवल परेशानियों को बंद करने की आदत में होना कम से कम कहना बुरा है। – osirisgothra