Hex / ASCII / Unicode
এনকোডিংটেক্সট, UTF-8 হেক্স বাইট এবং Unicode কোডপয়েন্টের মধ্যে রূপান্তর।
- টেক্সট
- হেক্স (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}-এর মতো একটি বর্ধিত সিনট্যাক্স প্রয়োজন। এই টুলের কোড-পয়েন্ট ইনপুট যেকোনো ফর্ম গ্রহণ করে।
আমি হেক্স বাইট পেস্ট করেছি এবং একটি “অবৈধ 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 নয়।