জাভাতে "সারোগেট জুড়ি" কী?


149

আমি ডকুমেন্টেশন পড়ছিলাম StringBuffer, বিশেষত বিপরীত () পদ্ধতির জন্য। সেই ডকুমেন্টেশনে সার্গেট জুড়ি সম্পর্কে কিছু উল্লেখ করা হয়েছে । এই প্রসঙ্গে একটি সারোগেট জুটি কী? এবং কম এবং উচ্চ surrogates কি?


3
এটি ইউটিএফ -১
termin এর

1
এই পদ্ধতিটি বগি: এটি সম্পূর্ণ অক্ষর - কোড পয়েন্টগুলি বিপরীত করা উচিত - সেগুলির পৃথক অংশ নয় , units কোড একক। ত্রুটিটি হল যে সেই নির্দিষ্ট লিগ্যাসি পদ্ধতিটি কেবল কোড পয়েন্টগুলির পরিবর্তে পৃথক চর ইউনিটগুলিতে কাজ করে, যা আপনি কেবল চার ইউনিট নয়, তৈরি করতে চান String । খুব খারাপ জাভা আপনাকে এটি ঠিক করার জন্য ওও ব্যবহারের অনুমতি দেয় না, তবে Stringক্লাস এবং StringBufferক্লাস উভয়ই finalআইপি করা হয়েছে । বলুন, এটি কি হত্যার জন্য শ্রুতিমধুরতা নয়? :)
tchrist

2
@ ট্রিচ্রিস্ট ডকুমেন্টেশন (এবং উত্স) বলেছে যে এটি কোড পয়েন্টের স্ট্রিং হিসাবে বিপরীত হয়। (সম্ভবতঃ ১.০.২ এটি করেনি, এবং আপনি আজকাল এমন আচরণের কোনও পরিবর্তন পাবেন না))
টম হাটিন -

উত্তর:


127

"সারোগেট জুড়ি" শব্দটি ইউটিএফ -16 এনকোডিং স্কিমের উচ্চ কোড-পয়েন্ট সহ ইউনিকোড অক্ষরগুলি এনকোডিংয়ের একটি উপায়কে বোঝায়।

ইউনিকোড অক্ষর এনকোডিংয়ে, 0x0 এবং 0x10FFFF এর মধ্যে মানগুলিতে ম্যাপ করা হয়।

অভ্যন্তরীণভাবে, জাভা ইউনিকোড পাঠ্যের স্ট্রিংগুলি সঞ্চয় করতে UTF-16 এনকোডিং স্কিম ব্যবহার করে। ইউটিএফ -১ In এ, 16-বিট (দ্বি-বাইট) কোড ইউনিট ব্যবহৃত হয়। যেহেতু 16 বিটগুলি কেবল 0x0 থেকে 0xFFFF এর অক্ষরের পরিসর ধারণ করতে পারে তাই কিছু অতিরিক্ত জটিলতা এই ব্যাপ্তির (0x10000 থেকে 0x10FFF) এর উপরে মান সংরক্ষণ করতে ব্যবহৃত হয়। সার্গেট হিসাবে পরিচিত কোড ইউনিটের জোড়া ব্যবহার করে এটি করা হয়।

সার্ওগেট কোড ইউনিট দুটি-কোড-ইউনিট ক্রমের শুরুতে বা শেষের দিকে অনুমোদিত কিনা তা নির্ভর করে "হাই সার্গেটস" এবং "লো সার্গেটস" নামে পরিচিত দুটি রেঞ্জে রয়েছে।


4
এটিতে সর্বাধিক ভোট রয়েছে তবে এটি একটি কোডের উদাহরণ দেয় না। বা আসলে কীভাবে এটি ব্যবহার করতে হয় সেগুলির কোনও উত্তর নেই। এজন্যই এটিকে নিম্নমানের করা হচ্ছে।
জর্জ জাভিয়ার

57

প্রারম্ভিক জাভা সংস্করণগুলি 16-বিট চর ডেটা টাইপ ব্যবহার করে ইউনিকোড অক্ষর উপস্থাপন করে। এই নকশাটি সেই সময়ে অর্থবোধ করেছিল, কারণ সমস্ত ইউনিকোডের অক্ষরগুলির মান 65,535 (0xFFFF) এর চেয়ে কম ছিল এবং এটি 16 বিটে উপস্থাপন করা যেতে পারে। পরে, ইউনিকোড সর্বাধিক মান বাড়িয়ে 1,114,111 (0x10FFFF) এ পৌঁছেছে। ইউনিকোড সংস্করণ ৩.১-এ ইউনিকোডের সমস্ত অক্ষরের প্রতিনিধিত্ব করতে 16-বিট মানগুলি খুব ছোট ছিল, ইউটিএফ -32 এনকোডিং প্রকল্পের জন্য 32-বিট মান - কোড পয়েন্ট নামে পরিচিত - গৃহীত হয়েছিল। তবে দক্ষ মেমরির ব্যবহারের জন্য 32-বিট মানগুলির চেয়ে 16-বিট মানগুলি অগ্রাধিকার দেওয়া হয়, তাই 16-বিট মানগুলির অবিচ্ছিন্ন ব্যবহারের জন্য ইউনিকোড একটি নতুন নকশা চালু করে। ইউটিএফ -১ enc এনকোডিং স্কিমটিতে গৃহীত এই নকশাটি 16 বিট উচ্চতর সার্গেটকে (U + D800 থেকে U + DBFF পরিসরে) এবং আরও 1,024 মানকে 16-বিট নিম্ন সারোগেটগুলিতে (U + DC00 পরিসীমাতে) নির্ধারণ করে ইউ + ডিএফএফএফ)।


7
আমি এটি গ্রহণযোগ্য উত্তরের চেয়ে ভাল পছন্দ করি, কারণ এটি ব্যাখ্যা করে যে ইউনিকোড ৩.১ কীভাবে মূল 65৫৫৩৫ এর মধ্যে ১০৪৪ + ১০২৪ (উচ্চ + নিম্ন) মানগুলি 1024 * 1024 নতুন মান অর্জন করতে পারে, কোনও অতিরিক্ত প্রয়োজনীয়তা ছাড়াই পার্সার্স শুরুতে শুরু হয় স্ট্রিং।
এরিক হর্স্ট

1
ইউটিএফ -16 বোঝার জন্য আমি এই উত্তরটি পছন্দ করি না এটি সর্বাধিক মেমরি-দক্ষ ইউনিকোড এনকোডিং। ইউটিএফ -8 বিদ্যমান, এবং বেশিরভাগ পাঠ্যকে দুটি বাইট হিসাবে রেন্ডার করে না । ইউটিএফ -16 বেশিরভাগ ক্ষেত্রেই আজ ব্যবহৃত হয় কারণ মাইক্রোসফ্ট এটি ইউটিএফ -32-র আগে গ্রহণ করেছিল মেমরির দক্ষতার জন্য নয়। আপনি যখন উইন্ডোজে প্রচুর ফাইল হ্যান্ডলিং করছেন তখন কেবলমাত্র আপনি যখন ইউটিএফ -১ want চান তখন কেবল তখনই আপনি এটি পড়তে এবং লিখতে উভয়ই হন । অন্যথায়, উচ্চ গতির (বি / সি ধ্রুবক অফসেট) জন্য ইউটিএফ -32 বা কম মেমরির জন্য ইউটিএফ -8 (বি / সি ন্যূনতম 1 বাইট)
ফান্ড মনিকার লসুইট

23

যে ডকুমেন্টেশনটি বলছে তা হ'ল অবৈধ ইউটিএফ -16 স্ট্রিংগুলি reverseপদ্ধতিটি কল করার পরে বৈধ হয়ে উঠতে পারে যেহেতু তারা বৈধ স্ট্রিংগুলির বিপরীত হতে পারে। একটি সারোগেট জুড়ি ( এখানে আলোচনা করা হয়েছে ) ইউটিএফ -16 এ 16-বিট মানগুলির একটি জুটি যা একটি একক ইউনিকোড কোড পয়েন্টকে এনকোড করে; নিম্ন এবং উচ্চতর সার্গেটগুলি সেই এনকোডিংয়ের দুটি অংশ ha


6
ব্যাখ্যা। একটি "স্ট্রিং" অবশ্যই "সত্য" অক্ষরগুলিতে (ওরফে "গ্রাফিকস" বা "পাঠ্য উপাদানসমূহ") এ উল্টানো উচিত। একটি একক "অক্ষর" কোড পয়েন্ট এক বা দুটি "চর" খণ্ড (সারোগেট জুটি) হতে পারে, এবং গ্রাফেম সেই কোড পয়েন্টগুলির মধ্যে এক বা একাধিক হতে পারে (যেমন একটি বেস অক্ষর কোড প্লাস এক বা একাধিক অক্ষর কোড, যার প্রতিটি) এক বা দুটি 16-বিট খণ্ড বা "অক্ষর" দীর্ঘ) হতে পারে। সুতরাং একটি গ্রাফিকিয়াম প্রতিটি দুটি "অক্ষর" দীর্ঘ, মোট 6 "অক্ষর" সমন্বয়যুক্ত তিনটি অক্ষর হতে পারে। সমস্ত 6 "অক্ষর" অবশ্যই অক্ষরগুলির পুরো স্ট্রিংটিকে বিপরীত করার সময় (যেমন বিপরীত নয়) এক সাথে রাখতে হবে।
ট্রায়ঙ্কো

4
সুতরাং "চর" ডেটা টাইপ বরং বিভ্রান্তিকর। "চরিত্র" একটি শিথিল শব্দ। "চর" টাইপটি কেবলমাত্র ইউটিএফ 16 জঞ্জাল আকার এবং আমরা একে চরিত্র বলি কারণ সারোগেট জোড়গুলির আপেক্ষিক বিরলতার কারণে (যেমন এটি সাধারণত একটি সম্পূর্ণ অক্ষর কোড পয়েন্ট উপস্থাপন করে), সুতরাং "অক্ষর" সত্যই একটি একক ইউনিকোড কোড পয়েন্টকে বোঝায় , তবে তারপরে সম্মিলিত অক্ষরগুলির সাথে আপনার অক্ষরগুলির ক্রম থাকতে পারে যা একক "চরিত্র / গ্রাফি / পাঠ্য উপাদান" হিসাবে প্রদর্শিত হয়। এটি রকেট বিজ্ঞান নয়; ধারণাগুলি সহজ, তবে ভাষাটি বিভ্রান্তিকর।
ট্রায়ঙ্কো

জাভা বিকাশকালে, ইউনিকোডটি শৈশবকালীন ছিল। ইউনিকোডে সারোগেট জোড়া পাওয়ার আগে জাভা প্রায় 5 বছর ধরে ছিল, তাই 16 বিট চরটি সেই সময়ে বেশ ভাল ফিট। এখন, আপনি ইউটিএফ -8 এবং ইউটিএফ -32 এর তুলনায় ইউটিএফ -8 এবং ইউটিএফ -32 ব্যবহার করা থেকে অনেক ভাল।
জোনাথন বাল্ডউইন

23

এই পোস্ট থেকে উপরের উত্তরগুলিতে আরও কিছু তথ্য যুক্ত করা হচ্ছে ।

জাভা -12-তে পরীক্ষিত, 5 এর উপরে সমস্ত জাভা সংস্করণে কাজ করা উচিত।

যেমনটি এখানে উল্লেখ করা হয়েছে: https://stackoverflow.com/a/47505451/2987755 ,
যে কোনও চরিত্র (যার ইউনিকোড ইউ + এফএফএফএফের উপরে রয়েছে) একটি সারোগেট জুটি হিসাবে উপস্থাপিত হয়েছে, যা জাভা চর মানগুলির একটি জোড়া হিসাবে সংরক্ষণ করে, অর্থাৎ একক ইউনিকোড অক্ষর দুটি সংলগ্ন জাভা অক্ষর হিসাবে উপস্থাপিত হয়।
যেমন আমরা নীচের উদাহরণে দেখতে পাচ্ছি।
1. দৈর্ঘ্য:

"🌉".length()  //2, Expectations was it should return 1

"🌉".codePointCount(0,"🌉".length())  //1, To get the number of Unicode characters in a Java String  

২. সমতা: নীচে
ইউনিকোড ব্যবহার করে স্ট্রিংয়ের জন্য "🌉" উপস্থাপন করুন \ud83c\udf09এবং সমতাটি পরীক্ষা করুন।

"🌉".equals("\ud83c\udf09") // true

জাভা ইউটিএফ -32 সমর্থন করে না

"🌉".equals("\u1F309") // false  

৩. আপনি ইউনিকোড চরিত্রটিকে জাভা স্ট্রিংয়ে রূপান্তর করতে পারবেন

"🌉".equals(new String(Character.toChars(0x0001F309))) //true

4. স্ট্রিং.সুবস্ট্রিং () পরিপূরক অক্ষর বিবেচনা করে না

"🌉🌐".substring(0,1) //"?"
"🌉🌐".substring(0,2) //"🌉"
"🌉🌐".substring(0,4) //"🌉🌐"

এটি সমাধান করতে আমরা ব্যবহার করতে পারি String.offsetByCodePoints(int index, int codePointOffset)

"🌉🌐".substring(0,"🌉🌐".offsetByCodePoints(0,1) // "🌉"
"🌉🌐".substring(2,"🌉🌐".offsetByCodePoints(1,2)) // "🌐"

সঙ্গে 5. iterating ইউনিকোড স্ট্রিং BreakIterator
ইউনিকোড সঙ্গে 6. বাছাইকরণ স্ট্রিংস java.text.Collator
7. চরিত্র toUpperCase(), toLowerCase(), পদ্ধতি ব্যবহার করা উচিত নয়, পরিবর্তে, ব্যবহার স্ট্রিংকে বড় হাতের অক্ষরে এবং বিশেষ লোকেল এর ছোট হাতের।
৮. ক্যারেক্টার ক্লাসে প্রতিটি পদ্ধতির জন্য Character.isLetter(char ch)সাপোর্ট করে না, আরও ভাল ব্যবহার করা হয় Character.isLetter(int codePoint), যেখানে পরিপূরক চরিত্রগুলি পরিচালনা করতে methodName(char ch)পারে এমন প্রকারের থাকবে methodName(int codePoint)
9. String.getBytes()বাইটস থেকে স্ট্রিংয়ে রূপান্তর করে, চার্সেট নির্দিষ্ট করুন InputStreamReader,OutputStreamWriter

রেফ:
https://coolsymbol.com/emojis/emoji-for-copy-and-paste.html#objects
https://www.online-toolz.com/tools/text-unicode-entities-convertor.php
https: //www.ibm.com/developerworks/library/j-unicode/index.html
https://www.oracle.com/technetwork/articles/javaee/supplementary-142654.html

উদাহরণ আরো তথ্য image1 image2
অন্যান্য পদ মূল্য অন্বেষণ করতে: স্বাভাবিক , বিড়ি


2
এই উত্তরের জন্য ভোট দেওয়ার জন্য বিশেষভাবে সাইন ইন করেছেন (যার অর্থ উইন্ডোটি ছদ্মবেশ থেকে স্বাভাবিকের পরিবর্তিত হয়েছে: পি)। একটি নুব জন্য সর্বোত্তম ব্যাখ্যা
এন

1
আপনাকে ধন্যবাদ !, আমি এটির সাহায্যে আনন্দিত, তবে মূল পোস্ট লেখক সমস্ত প্রশংসা প্রাপ্য।
dkb

দুর্দান্ত উদাহরণ! আমি এটিকে উজ্জীবিত করতে লগইন করেছি :) এবং আবারও এটি আমাকে ভাবতে (আবার) করতে বাধ্য করেছে যে জাভা কেন তাদের কোডটিতে জ্ঞান বাগগুলি জীবিত রাখে তা আমি সত্যিই বুঝতে পারি না। আমি সম্পূর্ণ সম্মান করি যে তারা বিদ্যমান কোডটি ভাঙতে চায় না, তবে আসুন ... এই বাগগুলি নিয়ে কাজ করার জন্য কত ঘন্টা হারিয়ে গেছে? যদি এটি ভেঙে যায় তবে ঠিক করুন, অভিশাপ!
ফ্রান্সজ ডি

6

সারোগেট জুটিগুলি ইউটিএফ -16 এর নির্দিষ্ট অক্ষরগুলির এনকোডিংয়ের পদ্ধতি বোঝায়, http://en.wikiki.org/wiki/UTF-16/UCS-2#Code_pPoint_U.2B10000..U.2B10FFFF দেখুন


11
"চরিত্র" এমন একটি বোঝা শব্দ।
ট্রায়ঙ্কো

1
ইউনিকোডে কোনও অক্ষর নেই, তবে কোডপয়েন্ট রয়েছে। প্রতিটি কোডপয়েন্টটি শূন্য হিসাবে কয়েকটি অক্ষরে রেন্ডার করতে পারে।
নিক ভলিনকিন

6

ছোট উপস্থাপনা

  • ইউনিকোড কোড পয়েন্ট উপস্থাপন করে। ইউনিকোড স্ট্যান্ডার্ড অনুযায়ী প্রতিটি কোড পয়েন্ট 8-, 16, - বা 32-বিট ব্লকে এনকোড করা যায়।
  • সংস্করণ 3.1 এর আগে, বেশিরভাগ ব্যবহার 8-বিট এনকোন্ডিং ছিল, ইউটিএফ -8 হিসাবে পরিচিত, এবং 16-বিট এনকোডিং, ইউসিএস -2 বা "ইউনিভার্সাল ক্যারেক্টার সেট 2 অক্টেটে কোডিং" ছিল। UTF-8 এনকোডগুলি ইউনিকোড পয়েন্টগুলিকে 1-বাইট ব্লকের ক্রম হিসাবে দেখায়, যখন ইউসিএস -2 সর্বদা 2 বাইট নেয়:

    এ = 41 - ইউটিএফ -8
    এ = 0041 এর সাথে 8-বিটের একটি ব্লক - ইউসিএস -2
    CE = সিই এ 9 সহ 16-বিটের একটি ব্লক - ইউটিএফ -8
    Ω = 03 এ 9 সহ 8-বিটের দুটি ব্লক - এর একটি ব্লক ইউসিএস -2 সহ 16-বিট

সমস্যা

কনসোর্টিয়াম ভেবেছিল যে কোনও 16 টি বিট মানব-পঠনযোগ্য ভাষা কভার করার জন্য যথেষ্ট হবে, যা 2 ^ 16 = 65536 সম্ভাব্য কোড মান দেয়। প্লেন 0 এর ক্ষেত্রে এটি সত্য ছিল, এটি বিপিএম বা বেসিক বহুভাষিক বিমান হিসাবেও পরিচিত, যার মধ্যে আজ 65536 কোড পয়েন্টের 55,445 রয়েছে includes বিপিএম চীনা-জাপানি-কোরিয়ান প্রতীক (সিজেকে) সহ বিশ্বের প্রায় প্রতিটি মানব ভাষা জুড়ে।

সময় পার হয়ে গেল এবং নতুন এশীয় চরিত্রের সেটগুলি যুক্ত করা হয়েছিল, চাইনিজ প্রতীকগুলি একা 70০,০০০ পয়েন্ট বেশি নিয়েছে। এখন, মানক 😺 এর অংশ হিসাবে এমনকি ইমোজি পয়েন্ট রয়েছে 😺 নতুন 16 "অতিরিক্ত" প্লেন যুক্ত করা হয়েছিল। ইউসিএস -২ ঘর প্লেন -0 এর চেয়ে বড় কোনও কিছুর জন্য যথেষ্ট ছিল না।

ইউনিকোডের সিদ্ধান্ত

  1. ইউনিকোডকে 17 বিমানের জন্য সীমাবদ্ধ করুন plane 65 বিমানের জন্য 536 অক্ষর = 1 114 112 সর্বাধিক পয়েন্ট।
  2. প্রতিটি কোড পয়েন্টের জন্য 32-বিট ধরে রাখতে এবং সমস্ত প্লেনগুলি কভার করতে বর্তমান ইউটিএফ -32, পূর্বে ইউসিএস -4 হিসাবে পরিচিত।
  3. গতিশীল এনকোডিং হিসাবে ইউটিএফ -8 ব্যবহার চালিয়ে যান, প্রতিটি কোড পয়েন্টের জন্য সর্বাধিক ইউটিএফ -8 থেকে 4 বাইট সীমাবদ্ধ করুন, প্রতি পয়েন্ট 1 থেকে 4 বাইট পর্যন্ত।
  4. ইউসিএস -২ হ্রাস করুন
  5. ইউসিএস -2 এর উপর ভিত্তি করে ইউটিএফ -16 তৈরি করুন। ইউটিএফ -16 গতিশীল করুন, সুতরাং এটি প্রতি পয়েন্ট 2 বাইট বা 4 বাইট লাগে। ইউটিএফ -16 এ 1024 পয়েন্ট U + D800 – U + DBFF, হাই সারোগেটস বলা হয়; ইউটিএফ -16 এ 1024 চিহ্ন ইউ + ডিসি 00 ইউ + ডিএফএফএফ, লো সারোগেটস বলা হয় assign

    এই পরিবর্তনগুলির সাথে, বিপিএমটি ইউটিএফ -16 এর 16 বিটের 1 ব্লকের সাথে আচ্ছাদিত রয়েছে, যখন সমস্ত "পরিপূরক চরিত্রগুলি" সারোগেট পেয়ারগুলিতে প্রতিটি বিট দ্বারা 16 টি বিট দ্বারা 2 টি ব্লক উপস্থাপন করে, সম্পূর্ণ 1024x1024 = 1 048 576 পয়েন্ট।

    একটি হাই সার্গেট কম সার্গেটের আগে । এই নিয়ম থেকে যে কোনও বিচ্যুতিকে একটি খারাপ এনকোডিং হিসাবে বিবেচনা করা হয়। উদাহরণস্বরূপ, একটি জুটি ব্যতীত সারোগেটটি ভুল, উচ্চতর সারোগেটের আগে একটি নিম্ন সারোগেট দাঁড়িয়ে থাকা ভুল।

    M, 'মিউজিকাল সিম্বল জি সিএলএফ', ইউটিএফ -১ in তে ইউটিএফ -১ in তে সার্গেটের জুটি হিসাবে 0xD834 0xDD1E (2 বাই 2 বাইট),
    ইউটিএফ -8-তে 0xF0 0x9D 0x84 0x9E (4 বাই 1 বাইট) হিসাবে ইউটিএফ -32 এ এনকোড
    করা হয়েছে 0x0001D11E (1 বাই 4 বাইট)।

বর্তমান পরিস্থিতি

  • যদিও মান অনুযায়ী সরোগেটগুলি কেবলমাত্র ইউটিএফ -16 এ নির্দিষ্ট করা হয়েছে, historতিহাসিকভাবে কিছু উইন্ডোজ এবং জাভা অ্যাপ্লিকেশন ইউটিএফ -8 এবং ইউসিএস -2 পয়েন্টগুলি এখন সারোগেট সীমার জন্য সংরক্ষিত রয়েছে।
    ভুল ইউটিএফ -8 / ইউটিএফ -16 এনকোডিং সহ উত্তরাধিকার অ্যাপ্লিকেশনগুলিকে সমর্থন করার জন্য একটি নতুন স্ট্যান্ডার্ড ডাব্লুটিএফ -8 , ওয়াবললি ট্রান্সফর্মেশন ফর্ম্যাট তৈরি করা হয়েছিল। এটি নির্বিচারে সারোগেট পয়েন্টগুলি সমর্থন করে যেমন একটি জোড়যুক্ত সারোগেট বা একটি ভুল ক্রম। আজ, কিছু পণ্য মান মেনে চলে না এবং ইউটিএফ -8 কে ডাব্লুটিএফ -8 হিসাবে বিবেচনা করে।
  • সার্গেট সমাধানটি বিভিন্ন এনকোডিংয়ের মধ্যে রূপান্তর করতে অনেকগুলি সুরক্ষা সমস্যা খুলেছিল , তাদের বেশিরভাগই ভালভাবে পরিচালনা করা হয়েছিল।

বিষয়টিকে অনুসরণ করতে অনেক historicতিহাসিক বিবরণ দমন করা হয়েছিল ⚖
সর্বশেষতম ইউনিকোড স্ট্যান্ডার্ডটি http://www.unicode.org/versions/latest এ পাওয়া যাবে


3

একটি সারোগেট জুটি ইউটিএফ -16 এ দুটি 'কোড ইউনিট' যা একটি 'কোড পয়েন্ট' তৈরি করে। জাভা ডকুমেন্টেশন উল্লেখ করছে যে এই 'কোড পয়েন্টগুলি' বিপরীত পরে, তাদের 'কোড ইউনিট' সঠিকভাবে অর্ডার করার পরে বৈধ থাকবে। এটি আরও বলেছে যে দুটি অযৌক্তিক সারোগেট কোড ইউনিট বিপরীত হতে পারে এবং একটি বৈধ সারোগেট জুড়ি তৈরি করতে পারে। যার অর্থ হল যদি অপরিকল্পিত কোড ইউনিটগুলি থাকে, তবে এমন সম্ভাবনা রয়েছে যে বিপরীতটির বিপরীতটি একই রকম নাও হতে পারে!

লক্ষ্য করুন, নথিতে গ্রাফিকস সম্পর্কে কিছুই বলা হয়নি - যা একাধিক কোডপয়েন্ট একত্রিত। যার অর্থ ই এবং এর সাথে যে অ্যাকসেন্ট বরাবর চলে তা এখনও স্যুইচ করা যেতে পারে, এইভাবে উচ্চারণটি ই এর আগে রাখে। যার অর্থ যদি ই এর আগে অন্য স্বর থাকে তবে তা ইতে থাকা উচ্চারণটি পেতে পারে।

বাবা!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.