2011-05-03 13 views
5

पर्ल का उपयोग करके, मैं lc() के साथ उच्चारण और विशेष वर्णों वाले शब्दों को कम करने की कोशिश कर रहा हूं लेकिन मैं नहीं कर सकता।पर्ल - लोअरकेस एक्सेंट लेटर्स

उदाहरण के लिए:

É यूएम Maco

रिटर्न

É उम Maco

उत्तर

8
-bash$ perl -we 'use utf8; binmode STDOUT, ":utf8"; print lc "É UM MAÇO"' 
é um maço 

utf8 दर्शाता है कि आपके कार्यक्रम पाठ यूनिकोड है। binmode विस्तृत वर्णों के उचित आउटपुट सुनिश्चित करता है।

आप use Encode; भी देख सकते हैं, docs देखें।

+1

'-CSA' ध्वज पर्ल को बताएगा कि '@ एआरजीवी' से दोनों std {in, out, err} और तर्क (लेकिन जब तक आप' -CSAD' में 'D' जोड़ते हैं, तब तक उनकी फ़ाइल सामग्री नहीं) यूटीएफ- 8, लेकिन आपको अभी भी 'utf8' का उपयोग आंतरिक रूप से करने की आवश्यकता है। – tchrist

+0

@ क्रिसमस: धन्यवाद, मुझे इस विकल्प के बारे में पता नहीं था। – Dallaylaen

0

आप इस http://perldoc.perl.org/functions/lc.html को देखा और बना दिया है यकीन है कि आप सभी के लिए है आपकी सेटिंग्स सही ढंग से स्थापित है। प्रभाव को पुन: पेश करने के लिए न्यूनतम कोड पोस्ट करना भी अच्छा होगा।

1

अपनी स्क्रिप्ट में

use locale; 

जोड़ने का प्रयास करें। इसे lc उच्चारण के साथ काम सहित विभिन्न कार्यों को बनाना चाहिए। पूर्ण परीक्षण स्क्रिप्ट:

use strict; use warnings; 
use locale; 
use utf8; 

print lc('É UM MAÇO'); # gives "é um maço" 
+1

यह वास्तव में एक बहुत अच्छा विचार नहीं है। – tchrist

+1

@ क्रिसमस - क्या आप कृपया विस्तृत कर सकते हैं? मुझे पता है कि लोकेल समर्थन भिन्न होता है, लेकिन यह विंडोज मशीनों पर मेरे चेक टेक्स्ट मैनिपुलेशन के लिए अच्छा काम करता है। – bvr

+0

लोकल टेक्स्ट से निपटने का एक बहुत पुराना और प्रतिबंधित ** प्री-यूनिकोड ** तरीका है। वे बहुत ही अस्पष्ट, बहुत छोटी हैं, और वे विरासत 8-बिट डेटा को छोड़कर कुछ भी नहीं करते हैं - और फिर कभी-कभी। करने के लिए सही बात यह है कि एन्कोडिंग परत सेट करना है ताकि आपकी विरासत सामग्री को यूनिकोड में अनुवादित किया जा सके, फिर केस मैपिंग और टकराव के लिए यूनिकोड नियमों (भरोसेमंद) पर भरोसा करें। यह असीम रूप से अधिक पोर्टेबल है। – tchrist

संबंधित मुद्दे