एक चरित्र, एक कोड बिंदु, एक ग्लिफ़ और एक अंगूर के बीच अंतर क्या है?


146

आधुनिक यूनिकोड की सूक्ष्मताओं को समझने की कोशिश मेरे सिर पर चोट कर रही है। विशेष रूप से, कोड अंक, वर्ण, ग्लिफ़ और ग्रेफेम के बीच का अंतर - अवधारणाएं जो सरलतम मामले में, ASCII वर्णों का उपयोग करते हुए अंग्रेजी पाठ के साथ व्यवहार करते समय, सभी का एक-दूसरे के साथ एक-से-एक संबंध होता है - यह परेशानी पैदा कर रहा है।

मैथियास ब्यानेन्स जावास्क्रिप्ट जैसे दस्तावेजों में इन शब्दों का उपयोग कैसे किया जाता है , यह देखते हुए कि हान एकीकरण पर एक यूनिकोड समस्या या विकिपीडिया का टुकड़ा है , मैंने इकट्ठा किया है कि ये अवधारणाएं एक ही चीज नहीं हैं और यह उन्हें भ्रमित करने के लिए खतरनाक है, लेकिन मैं इस तरह का हूं प्रत्येक पद का मतलब क्या है, समझ के लिए संघर्ष ।

यूनिकोड कंसोर्टियम इस सामान की व्याख्या करने के लिए एक शब्दावली प्रदान करता है , लेकिन यह इस तरह की "परिभाषाओं" से भरा है:

सार चरित्र । पाठ्य सामग्री के संगठन, नियंत्रण या प्रतिनिधित्व के लिए उपयोग की जाने वाली जानकारी की एक इकाई। ...

...

चरित्र । ... (२) अमूर्त चरित्र का पर्यायवाची। (3) यूनिकोड वर्ण एन्कोडिंग के लिए एन्कोडिंग की मूल इकाई। ...

...

ग्लिफ़ । (1) एक अमूर्त रूप जो एक या अधिक ग्लिफ़ छवियों का प्रतिनिधित्व करता है। (२) ग्लिफ़ छवि का पर्यायवाची। यूनिकोड चरित्र डेटा प्रदर्शित करने में, किसी विशेष वर्ण को चित्रित करने के लिए एक या अधिक ग्लिफ़ का चयन किया जा सकता है।

...

ग्राफ़ीम । (१) किसी विशेष लेखन प्रणाली के संदर्भ में लेखन की न्यूनतम विशिष्ट इकाई। ...

इन परिभाषाओं में से अधिकांश में बहुत ही अकादमिक और औपचारिक लगने की गुणवत्ता है, लेकिन अर्थ की गुणवत्ता की कमी है , या फिर परिभाषा की समस्या को अभी तक एक और शब्दावली प्रविष्टि या मानक के खंड के रूप में परिभाषित किया गया है।

इसलिए मैं उन लोगों से अधिक सीखा हुआ ज्ञान प्राप्त करता हूं, जिनमें से प्रत्येक की अवधारणाएं वास्तव में एक-दूसरे से भिन्न कैसे हैं, और किन परिस्थितियों में उनका एक-दूसरे के साथ एक-से-एक संबंध नहीं होगा?


कई अलग-अलग भाषाओं के लिए कई अलग-अलग लेखन प्रणालियां हैं। इस प्रकार लेखन की समस्या पर अलग-अलग विचार हैं, और इसके पीछे एक लंबा इतिहास भी है। IMHO यह ध्यान में रखना उपयोगी है, क्योंकि यूनिकोड सब कुछ कवर करने की कोशिश करता है । (श्राप एक ही है या अलग-अलग चरित्र? कांजी रेडिकल? हंगुल? डियाट्रिटिक्स? त्वचा के रंग का इमोजी ?? ...)
पाब्लो एच

जवाबों:


225
  • चरित्र एक अतिभारित शब्द है जिसकी तुलना में कई चीजें हो सकती हैं।

  • एक कोड बिंदु सूचना की परमाणु इकाई है। पाठ कोड बिंदुओं का एक क्रम है। प्रत्येक कोड बिंदु एक संख्या है जिसे यूनिकोड मानक द्वारा अर्थ दिया जाता है।

  • एक कोड इकाई एक एन्कोडेड कोड बिंदु के एक हिस्से के भंडारण की इकाई है । UTF-8 में इसका मतलब है 8-बिट्स, UTF-16 में इसका मतलब है 16-बिट्स। एक एकल कोड इकाई एक पूर्ण कोड बिंदु, या एक कोड बिंदु के हिस्से का प्रतिनिधित्व कर सकती है। उदाहरण के लिए, स्नोमैन ग्लिफ़ ( ) एक एकल कोड बिंदु है, लेकिन 3 UTF-8 कोड इकाइयाँ, और 1 UTF-16 कोड इकाई है।

  • एक अंगूर एक या एक से अधिक कोड बिंदुओं का एक क्रम है जो एकल, चित्रमय इकाई के रूप में प्रदर्शित होता है जिसे एक पाठक लेखन प्रणाली के एकल तत्व के रूप में पहचानता है। उदाहरण के लिए, दोनों aऔर ägraphemes हैं, लेकिन वे (एकाधिक कोड अंक शामिल हो सकते हैं जैसे äदो कोड अंक, आधार चरित्र के लिए एक हो सकता है adiaresis के लिए एक के बाद, लेकिन वहाँ भी है एक वैकल्पिक, विरासत, एकल कोड इस ग्रफीम का प्रतिनिधित्व बिंदु )। कुछ कोड पॉइंट कभी भी किसी ग्रैफेम का हिस्सा नहीं होते हैं (जैसे शून्य-चौड़ाई वाला गैर-जॉइनर, या दिशात्मक ओवरराइड)।

  • एक ग्लिफ़ एक छवि है, जिसे आमतौर पर एक फ़ॉन्ट (जो ग्लिफ़ का संग्रह होता है) में संग्रहीत किया जाता है, जिसका उपयोग अंगूर या उसके कुछ हिस्सों का प्रतिनिधित्व करने के लिए किया जाता है। फ़ॉन्ट एक एकल प्रतिनिधित्व में कई ग्लिफ़्स की रचना कर सकते हैं, उदाहरण के लिए, यदि ऊपर äएक एकल कोड बिंदु है, तो एक फ़ॉन्ट यह रेंडर करने के लिए चुना जा सकता है कि दो अलग-अलग, स्थानिक रूप से ओवरलाइड ग्लिफ़। ओटीएफ के लिए, फ़ॉन्ट के जीएसयूबी और जीपीओएस टेबल में इस काम को करने के लिए प्रतिस्थापन और स्थिति की जानकारी होती है। एक फ़ॉन्ट में एक ही अंगूर के लिए कई वैकल्पिक ग्लिफ़ हो सकते हैं।


4
मैंने कोड-पॉइंट और कोड-यूनिट के क्रम को फिर से व्यवस्थित करने वाला एक संपादन प्रस्तुत किया। मैं आपसे सहमत हूं कि कोड-यूनिट दूसरे नंबर पर आना चाहिए। के रूप में "जगह से बाहर" होने के नाते, मुझे संदेह है कि आप इस उत्तर को एक अलग उद्देश्य के रूप में देख रहे हैं जो मैं करता हूं। मुझे लगता है कि इन 5 शब्दों को एक ही स्थान पर रखने में बहुत महत्व है। आखिरी चीज जो मैं चाहता हूं, वह यह है कि "ग्लिफ़, ग्रेफेम, कोड यूनिट और कोड पॉइंट के बीच क्या अंतर है और इसके लिए दो स्थानों पर उत्तर प्राप्त करना है।" मुझे अन्य 4 के साथ एक चर्चा दिखाई देती है, लेकिन कोड-यूनिट नहीं।
मीका ज़ोल्टू

1
तो उदाहरण के लिए '\ uD83D \ uDC0A' (जो एक मगरमच्छ इमोजी दिखाता है) कोड बिंदु, ग्रैफ़ेम्स, आदि क्या हैं? विशेष रूप से, यह कैसे से संबंधित है .length, .codePointAt(0), .codePointAt(1), .charCodeAt(0)और .charCodeAt(1)परिणाम?
क्यूबलेक

3
@qbolec: वे दो UTF-16 कोड इकाइयाँ हैं जो एकल कोड बिंदु (U + 1F40A) को व्यक्त करती हैं, और यह देखते हुए कि यह एक इमोजी है, यह संभवतः इसका अपना, एकल अंगूर है।
केरेक एस.बी.

2
@ TomPažourek: विघटित विहितकरण में, इसे दो कोडपॉइंट्स ( aप्लस "संयोजन विचित्र)" द्वारा दर्शाया गया है ; रचित विहितीकरण में यह एक एकल कोडपॉइंट ( äपुरानी विरासत लैटिन -1 श्रेणी से) का प्रतिनिधित्व करता है । यूनिकोड विहितकरण वह विषय है जिसे आप जांचना चाहते हैं कि क्या यह आपकी रुचि है। एक रिक्त स्लेट की दुनिया में, केवल आधार और संयोजन अक्षर होंगे और कोई पूर्वनिर्मित कंपोजिट नहीं होंगे।
केरेक एसबी

1
@ कौशिक: मुझे यकीन नहीं है कि आपका क्या मतलब है: एक कोड इकाई भंडारण की एक इकाई है, हां, लेकिन सामान्य रूप से एक कोड बिंदु को भंडारण के लिए कई कोड इकाइयों (UTF-32 को छोड़कर) की आवश्यकता होती है।
केरेक एसबी

1

यूनिकोड मानक के बाहर एक चरित्र एक या एक से अधिक अंगूरों से बना पाठ की एक व्यक्तिगत इकाई है । यूनिकोड मानक "वर्ण" के रूप में परिभाषित करता है जो वास्तव में अंगूर और पात्रों का मिश्रण है। यूनिकोड अलग-अलग पात्रों के रूप में रसगुल्ले अंगूर की व्याख्या के लिए नियम प्रदान करता है।

एक यूनिकोड कोड बिंदु एक अद्वितीय को दिए गये नंबर यूनिकोड वर्ण (जो या तो एक चरित्र या एक ग्रफीम है)।

दुर्भाग्य से, यूनिकोड के नियमों में कुछ रस वाले अंगूरों को अन्य अंगूरों के रूप में व्याख्या करने की अनुमति है, जिनके पास पहले से ही अपने स्वयं के कोड बिंदु ( पूर्व-निर्मित रूप ) हैं। इसका मतलब यह है कि एक चरित्र का प्रतिनिधित्व करने के लिए यूनिकोड में एक से अधिक तरीके हैं। यूनिकोड सामान्यीकरण इस मुद्दे को संबोधित करता है।

एक ग्लिफ़ एक चरित्र का दृश्य प्रतिनिधित्व है। एक फ़ॉन्ट वर्णों के एक निश्चित समूह के लिए ग्लिफ़ का एक सेट प्रदान करता है (यूनिकोड वर्ण नहीं)। हर चरित्र के लिए, संभावित ग्लिफ़ की एक अनंत संख्या है।

मार्क अमेरी को एक उत्तर दें

सबसे पहले, जैसा कि मैंने कहा, प्रत्येक चरित्र के लिए संभावित ग्लिफ़ की एक अनंत संख्या है इसलिए नहीं, एक चरित्र "हमेशा एक ग्लिफ़ द्वारा दर्शाया गया" नहीं है। यूनिकोड अपने आप को ग्लिफ़ से बहुत अधिक चिंतित नहीं करता है, और इसके कोड चार्ट में इसे परिभाषित करने वाली चीजें निश्चित रूप से ग्लिफ़ नहीं हैं। समस्या यह है कि न तो वे सभी पात्र हैं। तो वे क्या हैं?

अधिक से अधिक इकाई, अंगूर या चरित्र कौन सा है? पाठ में उन ग्राफिक तत्वों को क्या कहते हैं जो अक्षर या विराम चिह्न नहीं हैं? एक शब्द जो जल्दी से दिमाग में आता है, वह है "अंगूर"। यह एक ऐसा शब्द है जो "एक पाठ में एक चित्रमय इकाई" के विचार को ठीक से जोड़ देता है। मैं इस परिभाषा को प्रस्तुत करता हूं: एक लिखित पाठ में एक छोटा सा अलग घटक है

कोई दूसरे तरीके से जा सकता है और कह सकता है कि अंगूर वर्णों से बने होते हैं, लेकिन फिर उन्हें "चीनी अंगूर" कहा जाएगा, और उन सभी बिट्स और टुकड़ों को चीनी अंगूर कहा जाता है जिन्हें इसके बजाय "वर्ण" कहा जाना होगा। हालाँकि, यह सब पीछे की ओर है। Graphemes विशिष्ट छोटे बिट्स और टुकड़े हैं। वर्ण अधिक विकसित होते हैं। "ग्लिफ़्स कंपोज़ेबल हैं" वाक्यांश, यूनिकोड के संदर्भ में बेहतर होगा क्योंकि "वर्ण कंपोज़ेबल हैं"।

यूनिकोड वर्णों को परिभाषित करता है लेकिन यह उन अंगूरों को भी परिभाषित करता है जिन्हें अन्य अंगूरों या पात्रों के साथ बनाया जाना है। आपके द्वारा रचित वे एकांत इसके उदाहरण हैं। यदि वे शायद पकड़ लेते हैं तो उन्हें यूनिकोड के बाद के संस्करण में अपने कोड पॉइंट मिलेंगे;)

इस सब के लिए एक पुनरावर्ती तत्व है। उच्च स्तर पर, अंगूर वर्ण बन जाते हैं, अंगूर बन जाते हैं, लेकिन यह नीचे सभी तरह से अंगूर होते हैं।

टीएस को जवाब दें

मानक राज्यों का अध्याय 1 : "यूनिकोड चरित्र एन्कोडिंग वर्णनात्मक वर्णों, वैचारिक चरित्रों और प्रतीकों को समान रूप से व्यवहार करता है, जिसका अर्थ है कि उनका उपयोग किसी भी मिश्रण में और समान सुविधा के साथ किया जा सकता है"। इस कथन को देखते हुए, हमें मानक में कुछ शर्तों के लिए तैयार रहना चाहिए। कभी-कभी उचित शब्दावली केवल मानक विकास के रूप में पूर्वव्यापी में स्पष्ट हो जाती है।

यह अक्सर एक भाषा की औपचारिक परिभाषाओं में होता है कि दो मौलिक चीजें एक-दूसरे के संदर्भ में परिभाषित होती हैं। उदाहरण के लिए, एक्सएमएल में एक तत्व को एक शुरुआती टैग के रूप में परिभाषित किया जाता है जो संभवतः सामग्री के बाद होता है, उसके बाद एक समाप्त टैग होता है। सामग्री को बदले में एक तत्व, चरित्र डेटा या कुछ अन्य संभावित चीजों के रूप में परिभाषित किया गया है। स्व-संदर्भात्मक परिभाषाओं का एक पैटर्न यूनिकोड मानक में भी निहित है:

एक अंगूर एक कोड बिंदु या एक चरित्र है।

एक चरित्र एक या एक से अधिक अंगूरों के अनुक्रम से बना है।

पहले इन दोनों परिभाषाओं के साथ सामना किया जब पाठक इस आधार पर कि एक कोड बिंदु पर पहले परिभाषा पर आपत्ति हो सकती है है एक चरित्र है, लेकिन यह हमेशा सच नहीं है। दो कोड बिंदुओं का एक अनुक्रम कभी-कभी सामान्यीकरण के तहत एकल कोड बिंदु को एन्कोड करता है , और एन्कोडेड कोड बिंदु चरित्र का प्रतिनिधित्व करता है, जैसा कि आंकड़ा 2.7 में सचित्र है । कोड बिंदुओं के अनुक्रम जो अन्य कोड बिंदुओं को कूटबद्ध करते हैं। यह थोड़ा मुश्किल हो रहा है और हम उस लेयर तक भी नहीं पहुंचे हैं जहां यूटीएफ -8 जैसी कैरेक्टर एन्कोडिंग स्कीमों का इस्तेमाल कोड पॉइंट्स को बाइट सीक्वेंस में एनकोड करने के लिए किया जाता है।

कुछ संदर्भों में, उदाहरण के लिए , धृतिशास्त्र पर एक विद्वतापूर्ण लेख , और एक चरित्र का अलग-अलग हिस्सा पाठ में अपने आप को दिखा सकता है। उस संदर्भ में, व्यक्तिगत चरित्र भाग को एक चरित्र माना जा सकता है, इसलिए यह समझ में आता है कि यूनिकोड मानक भी लचीला बना हुआ है।

जैसा कि मार्क एवेरी ने बताया, एक चरित्र को एक अधिक जटिल चीज़ में बनाया जा सकता है। यही है, प्रत्येक चरित्र वांछित होने पर एक अंगूर के रूप में सेवा कर सकता है। सभी रचना का अंतिम परिणाम एक ऐसी चीज है जो "उपयोगकर्ता एक चरित्र के रूप में सोचता है"। ऐसा लगता नहीं है कि कोई वास्तविक प्रतिरोध है, या तो मानक या इस चर्चा में, इस विचार के लिए कि उच्चतम स्तर पर पाठ में ये चीजें हैं जो उपयोगकर्ता व्यक्तिगत पात्रों के रूप में सोचता है। उस शब्द को ओवरलोड करने से बचने के लिए, हम उन सभी मामलों में "ग्रैपहेम" का उपयोग कर सकते हैं, जहां हम एक चरित्र की रचना करने के लिए इस्तेमाल किए गए भागों को संदर्भित करना चाहते हैं।

कभी-कभी यूनिकोड मानक अपनी शब्दावली के साथ सभी जगह होता है। उदाहरण के लिए, अध्याय 3 UTF-8 को "एन्कोडिंग फ़ॉर्म" के रूप में परिभाषित करता है जबकि शब्दकोष "एन्कोडिंग फ़ॉर्म" को कुछ और के रूप में परिभाषित करता है, और UTF-8 को "चरित्र एन्कोडिंग योजना" के रूप में परिभाषित करता है। एक अन्य उदाहरण "Grapheme_Base" और "Grapheme_Extend" हैं, जिन्हें गलतियों के लिए स्वीकार किया जाता है, लेकिन यह जारी रहता है क्योंकि उन्हें शुद्ध करना एक कार्य का एक सा है। मानक द्वारा नियोजित शब्दावली को कसने के लिए अभी भी काम किया जाना है।

COMBINING GRAPHEME JOINER को शामिल करने का प्रस्ताव तब गलत हो गया जब उसने कहा कि "ग्रेफेम एक या एक से अधिक एन्कोडेड वर्णों के अनुक्रम हैं जो उपयोगकर्ताओं के चरित्रों के बारे में सोचते हैं।" इसके बजाय इसे पढ़ना चाहिए, "एक या एक से अधिक अंगूरों का एक क्रम यह बताता है कि उपयोगकर्ता एक चरित्र के रूप में क्या सोचता है।" तब यह "वर्ण अनुक्रम" शब्द से अलग "वर्ण अनुक्रम" शब्द का उपयोग कर सकता था। दोनों शब्द उपयोगी हैं। "ग्रेपमे सीक्वेंस" बड़े करीने से छोटे टुकड़ों से एक चरित्र के निर्माण की प्रक्रिया को दर्शाता है। "चरित्र अनुक्रम" का अर्थ है कि हम सभी आम तौर पर इसका मतलब निकालते हैं: "उन चीजों का एक क्रम जो उपयोगकर्ता पात्रों के रूप में सोचते हैं।"

कभी-कभी एक प्रोग्रामर वास्तव में ग्रैपहेम अनुक्रमों के स्तर पर काम करना चाहता है, इसलिए उन अनुक्रमों का निरीक्षण और हेरफेर करने के लिए तंत्र उपलब्ध होना चाहिए, लेकिन आम तौर पर, जब टेक्स्ट को संसाधित किया जाता है, तो यह "चरित्र दृश्यों" पर काम करने के लिए पर्याप्त है (उपयोगकर्ता क्या सोचता है एक चरित्र के रूप में) और सिस्टम को निचले-स्तर के विवरण का प्रबंधन करने दें।

इस चर्चा में अब तक कवर किए गए हर मामले में, यह "ग्रैफेम" का उपयोग करने के लिए क्लीनर है, जो कि अविभाज्य घटकों को संदर्भित करने के लिए और "एंटिटी" से बना है। यह उपयोग दोनों शब्दों के लंबे समय से स्थापित अर्थों को भी बेहतर ढंग से दर्शाता है।


एक सतर्क -1; मुझे लगता है कि यह गलत है। आप का मतलब है कि एक चरित्र कई अंगूरों से बना हो सकता है, लेकिन हमेशा एक ही ग्लिफ़ द्वारा प्रतिनिधित्व किया जाएगा; मुझे लगता है कि वास्तव में यह दूसरा तरीका है। En.wikipedia.org/wiki/N-diaeresis जैसे पृष्ठ यह सुझाव देते हैं कि एक वर्णक के साथ एक अक्षर का संयोजन (कम से कम जो इसका अर्थ बदलता है) एक अलग नया अंगूर बनाता है, और यह कि डियाक्रिटिक अपने आप में एक अंगूर नहीं है। इस बीच, ग्लिफ़ स्पष्ट रूप से संयोजक हैं s͈̘̻̗̝i̪̭̹̝n̪̣̗̞̜c̥̖̮̫̣̯ͅe̯ͅ ̪͉̜̼̼̣̟̣Iph ̰̟̥̞̹c͈͔͇̼a̤̗n̘̭̙̪̦ ̙̹̼̦̲̞d̙̺̳̟ͅo̬̲̜̺ ̲̬̝t̺̖̗̩̱h̟̟̱i̹s̹̱.̯̖̝̯̟̜̥
मार्क एमी

मैं उस उत्तर की सराहना करता हूं, जो मैंने अभी देखा। हालाँकि, मुझे अभी भी लगता है कि अंगूर की आपकी परिभाषा वास्तव में गलत है, या कम से कम बाधाओं के साथ यूनिकोड शब्द को कैसे परिभाषित करता है। आप "सभी पीछे" के रूप में वर्णों से बना होने वाले एक अंगूर के विचार को खारिज करते हैं, लेकिन मैंने थोड़ी खुदाई की और unicode.org/L2/L2000/00274-N2236-grapheme-jpger.htm पाया, जो वस्तुतः कथन से शुरू होता है " ग्रेफेम एक या एक से अधिक एन्कोड किए गए वर्णों के अनुक्रम हैं "
मार्क अमेरी

और यह कथन जारी है, "... जो उपयोगकर्ताओं को पात्रों के रूप में सोचते हैं, उनके अनुरूप है।" यहां तक ​​कि शब्द " ग्रेफेम-जॉइनर ", साथ ही शब्द के पीछे का तंत्र, मेरे उत्तर की शुरुआत में मैंने जो कहा है, वह इस बात का उदाहरण है कि यूनिकोड मानक "वर्ण" के रूप में परिभाषित करता है, वास्तव में अंगूर और पात्रों का मिश्रण है। यह " प्रीप्रोस्ड कैरेक्टर्स " और " ग्रैफेम क्लस्टर्स " जैसे कंट्रोवर्सीज़ को इंट्रस्ट करने के बजाय ग्रैपहेम "ग्रैफेम्स" और कैरेक्टर्स "कैरेक्टर्स" को कॉल करने के लिए क्लीनर है ।
गरीब योरिक

@PoorYorick आप दावा करते हैं, कि "... एक वर्ण एक या एक से अधिक ग्राइप्स से बना टेक्स्ट की एक व्यक्तिगत इकाई है" और "ग्रेफेम विशिष्ट छोटे बिट्स और टुकड़े हैं। वर्ण अधिक विकसित हैं"। क्या आपके पास इन दावों का समर्थन करने वाला कोई संदर्भ है? क्योंकि मुझे किसी तरह संदेह है, कि यूनिकोड संघ ने जानबूझकर उनके नामों को किसी तरह "उलटा" परिभाषित करने का फैसला किया।
टीएस

@PoorYorick मैंने आपकी बात को समझा, इससे पहले कि आप इस स्पष्टीकरण को जोड़ते, इसीलिए मैंने पूछा नहीं। मैंने केवल संदर्भों के लिए कहा (लेक्सिकॉन, वैज्ञानिक लेख, तकनीकी मानक, ...), क्योंकि मुझे कोई भी दस्तावेज नहीं पता था, जो आपके द्वारा व्याख्या करने के तरीके का उपयोग करता है। (अंगूर के लिए पहले कुछ Google परिणाम भी अपने तरीके से शब्द का उपयोग नहीं करते हैं)। आपने एक ब्लॉकचोट जोड़ा "A grapheme एक कोड बिंदु या एक चरित्र है। [...]" - लेकिन यह कहाँ से है? अंत में आप कहते हैं "दोनों शब्दों के लंबे समय से स्थापित अर्थ।" - अगर यह स्थापित है, तो किसी चीज़ से लिंक करें, वह इस तरह से शब्द का उपयोग कर रहा है।
TS
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.