हेक्स / ASCII / यूनिकोड
एन्कोडिंगटेक्स्ट, UTF-8 हेक्स बाइट्स और यूनिकोड कोडपॉइंट के बीच रूपांतरण।
- टेक्स्ट
- हेक्स (UTF-8)
- कोडपॉइंट
इस पृष्ठ पर
hex / ASCII / Unicode कन्वर्टर क्या है?#
टेक्स्ट के एक ही टुकड़े को तीन सचमुच अलग तरीकों से लिखा जा सकता है, और यह औज़ार आपको तीनों को एक साथ देखने देता है:
- टेक्स्ट — वे शाब्दिक कैरेक्टर जैसे आप उन्हें टाइप और पढ़ते हैं (
Hello 世界 🌍)। - हेक्स बाइट्स — हेक्साडेसिमल में कच्चा UTF-8 बाइट अनुक्रम, जोड़ी प्रति एक बाइट (
48 65 6C 6C 6F 20 ...)। यही वास्तव में नेटवर्क पर यात्रा करता है या फ़ाइल में बैठता है। - कोड पॉइंट्स — Unicode स्केलर वैल्यूज़, प्रति कैरेक्टर एक
U+XXXX(U+0048 U+0065 ... U+1F30D)। यह है Unicode खुद कैसे कैरेक्टरों को नंबर देता है, किसी भी बाइट एन्कोडिंग से स्वतंत्र।
इन तीन दृश्यों का महत्व इसलिए है क्योंकि एक बार ASCII छोड़ते हैं तो वे एक ही लंबाई के नहीं होते — और यही किसी भी और चीज़ से ज़्यादा टेक्स्ट-एन्कोडिंग भ्रम का एकल स्रोत है। एक कैरेक्टर एक कोड पॉइंट है, पर UTF-8 में वह एक से चार बाइट घेर सकता है। पृथ्वी-ग्लोब इमोज़ी 🌍 एक एकल कैरेक्टर है (U+1F30D), पर UTF-8 में वह चार बाइट्स है (F0 9F 8C 8D)। यदि आपने कभी स्ट्रिंग लंबाई गलत गिनी हो, देखा हो कि किसी डेटाबेस ने स्ट्रिंग को “बहुत लंबा” कहकर अस्वीकार किया हो, या देखा हो कि कोई सबस्ट्रिंग स्लाइस किसी कैरेक्टर के बीच में जा बैठे, तो आप पहले ही इस दरार से मिल चुके हैं।
तीनों में से किसी एक को संपादित करें और बाकी दो तुरंत निकाले जाते हैं। पार्सर सहिष्णु है: हेक्स इनपुट स्पेसेस, कोलन, डैश, 0x प्रीफ़िक्स स्वीकार करता है; कोड-पॉइंट इनपुट U+, \u, 0x, या खाली हेक्स स्वीकार करता है, जो स्पेसेस, कॉमा, या सेमीकॉलन से अलग।
इसका उपयोग कैसे करें#
- इनपुट बॉक्स के ऊपर मोड चयनक से घोषित करें कि आप क्या टाइप कर रहे हैं: टेक्स्ट, हेक्स, या कोड पॉइंट्स।
- इनपुट बॉक्स में चिपकाएँ या संपादित करें। बाकी दो दृश्य दाईं ओर स्वतः भर जाते हैं।
- तीनों में से किसी के भी बगल में कॉपी का उपयोग करें उस निरूपण को लेने के लिए।
- नमूना
Hello 世界 🌍लोड करता है ताकि आप देख सकें कि ASCII, CJK, और एक इमोज़ी कैसे अलग-अलग मैप होते हैं। साफ़ करें सब कुछ खाली कर देता है।
प्रमुख विशेषताएँ#
- तीन दृश्य, सत्य का एक स्रोत। जो भी निरूपण आपके पास हो उसे संपादित करें; बाकी गणना किए जाते हैं, कभी हाथ से नहीं बनाए जाते।
- Latin-1 नहीं, UTF-8 बाइट्स। हेक्स आउटपुट वास्तविक ऑन-द-वायर UTF-8 बाइट अनुक्रम है, जो लगभग हर आधुनिक सिस्टम उपयोग करता है — न कि लीगेसी एक-बाइट-प्रति-कैरेक्टर धारणा।
- कोड-पॉइंट जागरूक, अस्ट्रल कैरेक्टर सहित।
for...ofपुनरावृत्ति का अर्थ है कि एक इमोज़ी एक एकल कोड पॉइंट गिना जाता है, दो सरोगेट हिस्सों के रूप में नहीं, इसलिएU+1F30Dवही है जो आप देखते हैं — कभीD83C DF0Dनहीं। - वापसी पर सख्त। ऐसे हेक्स बाइट्स जो वैध UTF-8 नहीं बनाते (विषम-लंबाई स्ट्रिंग, या एक लटकता हुआ कंटिन्यूएशन बाइट) स्पष्ट त्रुटि के साथ रिपोर्ट किए जाते हैं बजाय गड़बड़ टेक्स्ट में डिकोड किए जाने के। वैध दायरे से बाहर के कोड पॉइंट्स, और अकेले सरोगेट्स (
U+D800–U+DFFF), अस्वीकार किए जाते हैं।
कार्य उदाहरण#
नमूना लोड करें ताकि Hello 世界 🌍 मिले, और तीनों निकाले गए दृश्य हैं:
Text: Hello 世界 🌍
Hex bytes: 48 65 6C 6C 6F 20 E4 B8 96 E7 95 8C 20 F0 9F 8C 8D
Code points: U+0048 U+0065 U+006C U+006C U+006F U+0020 U+4E16 U+754C U+0020 U+1F30D
ASCII अक्षर H e l l o उबाऊ हिस्सा हैं: प्रत्येक एक बाइट, कोड पॉइंट्स U+0048 से U+006F। दिलचस्प हिस्सा बाकी है:
世(U+4E16) तीन UTF-8 बाइट्स हैं:E4 B8 96।界(U+754C) भी तीन बाइट्स हैं:E7 95 8C। एक कैरेक्टर, पर एक बाइट नहीं।🌍(U+1F30D) चार UTF-8 बाइट्स हैं:F0 9F 8C 8D। कोड पॉइंटU+FFFFसे ऊपर है, इसलिए यह Unicode के अस्ट्रल प्लेन में रहता है और उसे 4-बाइट UTF-8 अनुक्रम चाहिए — फिर भी वह एक एकल कैरेक्टर है, कोड-पॉइंट सूची में एक प्रविष्टि।
प्रयोग उल्टा चलाएँ: मोड को कोड पॉइंट्स पर स्विच करें, U+1F600 U+1F604 चिपकाएँ, और देखें कि टेक्स्ट (😄 😄-परिवार के इमोज़ी) और UTF-8 हेक्स दोनों प्रकट होते हैं। वह राउंड-ट्रिप ही है जिससे आप पुष्टि करते हैं कि कौन से बाइट्स किस कैरेक्टर से मेल खाते हैं।
अक्सर पूछे जाने वाले प्रश्न#
मेरा इमोज़ी चार हेक्स बाइट्स क्यों लेता है पर केवल एक कोड पॉइंट?#
क्योंकि UTF-8 एक चर-चौड़ाई एन्कोडिंग है। U+0080 से नीचे के कोड पॉइंट्स एक बाइट में समाते हैं; U+0080–U+07FF दो लेते हैं; U+0800–U+FFFF तीन लेते हैं; और U+10000 पर या ऊपर कुछ भी (अधिकांश इमोज़ी, ऐतिहासिक लिपियाँ, संगीत चिह्न) चार लेता है। कोड पॉइंट Unicode का कैरेक्टर के लिए नाम है; बाइट्स है कैसे UTF-8 उसे स्टोर करना होता है। एक ही कैरेक्टर, दो अलग नंबर।
U+XXXX और \uXXXX में क्या अंतर है?#
दोनों एक ही कोड पॉइंट को संदर्भित करते हैं पर अलग दुनियाओं से आते हैं। U+0041 Unicode का अपना नोटेशन है। A वह एस्केप है जो JavaScript, Java, और C स्ट्रिंग लिटरल्स में उपयोग होता है। पकड़ यह है: \uXXXX केवल चार हेक्स अंक रखता है, इसलिए यह सीधे U+1F30D जैसे अस्ट्रल कोड पॉइंट को व्यक्त नहीं कर सकता — \u का उपयोग करने वाली भाषाओं को या तो एक सरोगेट पेयर (🌍) या \u{1F30D} जैसे कोई विस्तारित सिंटैक्स चाहिए। इस औज़ार का कोड-पॉइंट इनपुट दोनों रूप स्वीकार करता है।
मैंने हेक्स बाइट्स चिपकाए और “invalid UTF-8” त्रुटि मिली। इसका क्या मतलब है?#
आपने जो बाइट्स चिपकाए वे क़ानूनी UTF-8 अनुक्रम नहीं बनाते — सबसे अक्सर क्योंकि हेक्स स्ट्रिंग की लंबाई विषम है (आधा बाइट गायब), कोई लीडिंग बाइट किसी मल्टी-बाइट अनुक्रम का दावा करता है जिसे निम्नलिखित बाइट्स पूरा नहीं करते, या डेटा वास्तव में UTF-8 के अलावा किसी में एन्कोड था (GBK, Shift-JIS, कच्चा Latin-1)। डिकोडर सख्त मोड उपयोग करता है इसलिए समस्या प्रतिस्थापन कैरेक्टर्स चुपचाप पैदा करने के बजाय रिपोर्ट की जाती है।
क्या मैं इसका उपयोग किसी स्ट्रिंग में “वास्तविक” कैरेक्टर गिनने के लिए कर सकता हूँ?#
हाँ — कोड-पॉइंट गणना वह गणना है जो एक यूज़र सोचेगा, और यही है जिस पर अधिकांश UI को सीमित करना चाहिए। ध्यान दें कि Hello 世界 🌍 कोड पॉइंट्स द्वारा 10 कैरेक्टर हैं, भले ही UTF-8 में वह 17 बाइट्स है और JavaScript में 11 UTF-16 कोड यूनिट्स (string.length)। यदि आपको किसी ट्वीट या फ़ॉर्म फ़ील्ड के लिए कैरेक्टर बजट चाहिए, तो कोड पॉइंट्स गिनें, बाइट्स नहीं और न ही string.length।