"একই দেখায়" ইউনিকোডের অক্ষরগুলি কীভাবে তুলনা করবেন?


94

আমি একটা অবাক করা ইস্যুতে পড়ে যাই।

আমি আমার অ্যাপ্লিকেশনটিতে একটি পাঠ্য ফাইল লোড করেছি এবং আমার কিছু যুক্তি রয়েছে যা মানটি µ এর সাথে তুলনা করে µ

এবং আমি বুঝতে পেরেছি যে পাঠ্যগুলি সমান হলেও তুলনা মানটি মিথ্যা।

 Console.WriteLine("μ".Equals("µ")); // returns false
 Console.WriteLine("µ".Equals("µ")); // return true

পরবর্তী লাইনে µ অক্ষরটি অনুলিপি করা হয়।

তবে এগুলি কেবলমাত্র অক্ষরগুলির মতো না not

অক্ষরগুলি একই দেখায় তবে বাস্তবে আলাদা হয় তার তুলনা করার জন্য কি সি # তে কোনও উপায় আছে?


159
দেখে মনে হচ্ছে আপনি শ্রাইডিনজারের মিউ পেয়ে গেছেন।
বোল্টক্লক

19
এগুলি আলাদা আলাদা অক্ষর - যদিও তারা দেখতে একই রকম, তবে তাদের আলাদা আলাদা অক্ষর কোড রয়েছে।
ব্যবহারকারী 2864740

94
ইউনিকোডে স্বাগতম
ta.speot.is

11
আপনি কি অর্জন করতে চান? যে দুটি সমান হওয়া উচিত তারপরও তাদের অক্ষর কোড ভিন্ন তবে একই মুখ?
জেড

28
"একই চেহারা" এবং "একই চেহারা" অস্পষ্ট ধারণা। তারা কি গ্লাইফগুলির পরিচয় বোঝায় বা কেবল সাদৃশ্য দেখায়? কিভাবে বন্ধ? মনে রাখবেন যে দুটি অক্ষরের কিছু ফন্টে অভিন্ন গ্লাইফ থাকতে পারে, অন্যটিতে খুব অনুরূপ এবং অন্য একটি ফন্টে একেবারেই পৃথক। কী গুরুত্বপূর্ণ তা হল আপনি কেন এমন তুলনা করবেন এবং কোন প্রসঙ্গে (এবং মিথ্যা ইতিবাচক এবং মিথ্যা নেতিবাচক গ্রহণযোগ্যতা)।
জুলকা কে। কোরপেলা

উত্তর:


125

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

এই নির্দিষ্ট পরিস্থিতির জন্য, আপনি যদি টনির উত্তরের লিঙ্কগুলি উল্লেখ করেন তবে আপনি দেখতে পাবেন যে ইউ + 00 বি 5 এর সারণীটি বলেছেন:

পঁচন <কমপ্যাট> ছোট ছোট লেটার মিউ (ইউ + 03 বিসি)

এর অর্থ U + 00B5, আপনার আসল তুলনার দ্বিতীয় অক্ষর, প্রথম অক্ষরটি ইউ +03 বিবিসিতে পচে যেতে পারে।

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

using System;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        char first = 'μ';
        char second = 'µ';

        // Technically you only need to normalize U+00B5 to obtain U+03BC, but
        // if you're unsure which character is which, you can safely normalize both
        string firstNormalized = first.ToString().Normalize(NormalizationForm.FormKD);
        string secondNormalized = second.ToString().Normalize(NormalizationForm.FormKD);

        Console.WriteLine(first.Equals(second));                     // False
        Console.WriteLine(firstNormalized.Equals(secondNormalized)); // True
    }
}

ইউনিকোড নিয়মমাফিককরণ এবং বিভিন্ন নিয়মমাফিককরণ ফর্ম বিস্তারিত জানার জন্য পড়ুন System.Text.NormalizationFormএবং ইউনিকোড বৈশিষ্ট


26
ইউনিকোড স্পেস লিঙ্কের জন্য ধন্যবাদ। আমি প্রথমবার এটি পড়তে। এটি থেকে ছোট নোট: "নরমালাইজেশন ফর্মগুলি কেসি এবং কেডি অন্ধভাবে অন্বেষণমূলক পাঠ্যের জন্য প্রয়োগ করা উচিত নয় .. এই নরমালাইজেশন ফর্মগুলি বড় হাতের বা ছোট হাতের ম্যাপিংয়ের মতো বলে মনে করা ভাল: মূল অর্থ সনাক্তকরণের জন্য কিছু নির্দিষ্ট ক্ষেত্রে কার্যকর তবে সম্পাদনও করছে পাঠ্যে পরিবর্তনগুলি যা সর্বদা উপযুক্ত নাও হতে পারে। "
ব্যবহারকারী 2864740

149

কারণ এটি সত্যই ভিন্ন প্রতীক এমনকি তারা দেখতে একই রকম, প্রথমটি হ'ল প্রকৃত অক্ষর এবং চর রয়েছে code = 956 (0x3BC)এবং দ্বিতীয়টি মাইক্রো চিহ্ন এবং রয়েছে 181 (0xB5)

তথ্যসূত্র:

সুতরাং আপনি যদি এগুলি তুলনা করতে চান এবং আপনার সমান হতে হবে তবে তুলনা করার আগে আপনাকে নিজে এটি পরিচালনা করতে হবে বা একটি চরটিকে অন্যটির সাথে প্রতিস্থাপনের আগে প্রতিস্থাপন করতে হবে। অথবা নিম্নলিখিত কোড ব্যবহার করুন:

public void Main()
{
    var s1 = "μ";
    var s2 = "µ";

    Console.WriteLine(s1.Equals(s2));  // false
    Console.WriteLine(RemoveDiacritics(s1).Equals(RemoveDiacritics(s2))); // true 
}

static string RemoveDiacritics(string text) 
{
    var normalizedString = text.Normalize(NormalizationForm.FormKC);
    var stringBuilder = new StringBuilder();

    foreach (var c in normalizedString)
    {
        var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
        if (unicodeCategory != UnicodeCategory.NonSpacingMark)
        {
            stringBuilder.Append(c);
        }
    }

    return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}

এবং ডেমো


11
কৌতূহলের বাইরে, দুটি ols চিহ্ন থাকার কারণ কী? আপনি "কিলো সাইন" (অথবা আপনি কি?) নামের একটি উত্সর্গীকৃত কে দেখতে পাচ্ছেন না।
মার্টিনহ্যাথ

12
@ মার্টিনহ্যাথ: উইকিপিডিয়া অনুসারে, এটি " reasonsতিহাসিক কারণে"
বোল্টক্লক

12
ইউনিকোডের পুরানো অক্ষর সেটগুলি (যেমন আইএসও 8859-1 এর মতো ) থেকে অনেকগুলি সামঞ্জস্যের অক্ষর এসেছে , যাতে এই চরিত্রের সেটগুলি থেকে রূপান্তর সহজতর হয়। যখন অক্ষর সেটগুলি 8 বিটের মধ্যে সীমাবদ্ধ ছিল, তখন তারা খুব সাধারণ গণিত এবং বৈজ্ঞানিক ব্যবহারের জন্য কয়েকটি গ্লাইফ (কিছু গ্রীক বর্ণের মতো) অন্তর্ভুক্ত করবে। উপস্থিতির উপর ভিত্তি করে গ্লাইফ পুনরায় ব্যবহার সাধারণ ছিল, তাই কোনও বিশেষায়িত 'কে' যুক্ত করা হয়নি। তবে এটি সর্বদা একটি কাজ ছিল; "মাইক্রো" এর সঠিক চিহ্নটি হ'ল প্রকৃত গ্রীক লোয়ারকেস মিউ, ওহমের সঠিক চিহ্নটি হ'ল আসল মূলধন ওমেগা এবং আরও on
ভিজিআর

8
হিস্টেরিকাল
কিসমিসের

11
সিরিয়াল জন্য একটি বিশেষ কে আছে?

86

তাদের উভয়ের আলাদা আলাদা চরিত্রের কোড রয়েছে: আরও তথ্যের জন্য এটি দেখুন

Console.WriteLine((int)'μ');  //956
Console.WriteLine((int)'µ');  //181

যেখানে, প্রথম জন হলেন:

Display     Friendly Code   Decimal Code    Hex Code    Description
====================================================================
μ           &mu;            &#956;          &#x3BC;     Lowercase Mu
µ           &micro;         &#181;          &#xB5;      micro sign Mu

চিত্র


39

নির্দিষ্ট উদাহরণস্বরূপ μগড় (mu) এবং µ(মাইক্রো চিহ্ন), পরেরটির একটি হয়েছে সামঞ্জস্য পচানি যাতে আপনি করতে পারেন, সাবেক করার স্বাভাবিক স্ট্রিং FormKCবা FormKDমাউস থেকে মাইক্রো লক্ষণ রূপান্তর করবে।

তবে, অক্ষরগুলির প্রচুর সেট রয়েছে যা দেখতে একরকম তবে কোনও ইউনিকোড নরমালাইজেশন ফর্মের অধীনে নয়। উদাহরণস্বরূপ, A(লাতিন), Α(গ্রীক), এবং А(সিরিলিক)। ইউনিকোড ওয়েবসাইটে এইগুলির একটি তালিকা সহ একটি কনফিউজেবল.টিএসটিএস ফাইল রয়েছে, এটি ডেভেলপারদেরকে হোমোগ্রাফের আক্রমণ থেকে রক্ষা করতে সহায়তা করার উদ্দেশ্যে । প্রয়োজনে আপনি এই ফাইলটি বিশ্লেষণ করতে পারেন এবং স্ট্রিংয়ের "ভিজ্যুয়াল নরমালাইজেশন" এর জন্য একটি টেবিল তৈরি করতে পারেন।


নরমালাইজ করার সময় অবশ্যই জেনে রাখা ভাল। তারা পৃথক থাকা অবাক লাগে।
ব্যবহারকারী 2864740

4
@ ইউজার ২6464647৪০: যদি বড় হাতের অক্ষর গ্রীক তাউ রোমান হরফ টি থেকে আলাদা না থেকে থাকে তবে গ্রীক ও রোমান পাঠকে বর্ণানুক্রমিকভাবে সংজ্ঞায়িতভাবে করা খুব কঠিন হবে difficult তদুপরি, যদি কোনও টাইপফেস গ্রীক এবং রোমান বর্ণগুলির জন্য আলাদা ভিজ্যুয়াল স্টাইল ব্যবহার করে, তবে গ্রীক অক্ষরগুলির আকারগুলির সাথে রোমান বর্ণগুলির অনুরূপ গ্রীক অক্ষরগুলি যদি আলাদা হয় না তবে তা খুব বিভ্রান্তিকর হবে।
সুপারক্যাট

7
আরও গুরুত্বপূর্ণ বিষয়, ইউরোপীয় বর্ণমালা একত্রিত করা কার্যকর করা কঠিন ToUpper/ ToLowerকার্যকর করতে পারে। আপনার ইংরেজি "B".ToLower()হতে হবে bতবে βগ্রীক এবং вরাশিয়ান ভাষায় থাকতে হবে । যেমনটি হয়, কেবল তুর্কি (ডটলেস i) এবং অন্যান্য কয়েকটি ভাষার ক্ষেত্রে ডিফল্ট থেকে পৃথক কেসিং বিধি প্রয়োজন need
dan04

@ ডান04: আমি অবাক হয়েছি যে কেউ কি কখনও তুরস্কের "আমি" এবং "আমি" এর চারটি পরিবর্তনের জন্য অনন্য কোড পয়েন্ট নির্ধারণের বিষয়টি বিবেচনা করেছেন? এটি টুঅপার / টু লোয়ারের আচরণে যে কোনও অস্পষ্টতা দূর করতে পারে।
কেট

34

একটি ইউনিকোড ডাটাবেসে উভয় অক্ষর অনুসন্ধান করুন এবং পার্থক্যটি দেখুন

একটি গ্রীক ছোট চিঠি µ এবং অন্যটি মাইক্রো সাইন µ

Name            : MICRO SIGN
Block           : Latin-1 Supplement
Category        : Letter, Lowercase [Ll]
Combine         : 0
BIDI            : Left-to-Right [L]
Decomposition   : <compat> GREEK SMALL LETTER MU (U+03BC)
Mirror          : N
Index entries   : MICRO SIGN
Upper case      : U+039C
Title case      : U+039C
Version         : Unicode 1.1.0 (June, 1993)

Name            : GREEK SMALL LETTER MU
Block           : Greek and Coptic
Category        : Letter, Lowercase [Ll]
Combine         : 0
BIDI            : Left-to-Right [L]
Mirror          : N
Upper case      : U+039C
Title case      : U+039C
See Also        : micro sign U+00B5
Version         : Unicode 1.1.0 (June, 1993)

4
এটি কীভাবে 37 টি উপার্জন পেয়েছে? এটি প্রশ্নের উত্তর দেয় না ("কীভাবে ইউনিকোড অক্ষরগুলির তুলনা করতে পারি"), কেন এই নির্দিষ্ট উদাহরণটি সমান নয় তা কেবল মন্তব্য করে। সর্বোত্তম, এটি প্রশ্নের মন্তব্য হওয়া উচিত। আমি বুঝতে পারি মন্তব্য বিন্যাসকরণ বিকল্পগুলি উত্তর ফরম্যাটিং বিকল্পগুলির মতো এটিকে সুন্দরভাবে পোস্ট করার অনুমতি দেয় না, তবে এটি উত্তর হিসাবে পোস্ট করার কোনও বৈধ কারণ নয়।
কোনারাক

5
আসলে প্রশ্নটি আলাদা ছিল, কেন μ এবং µ সমতা চেক কেন মিথ্যা বলে জিজ্ঞাসা করছিল। এই উত্তর এটি উত্তর। পরে ওপি আরও একটি প্রশ্ন জিজ্ঞাসা করেছিল (এই প্রশ্ন) কীভাবে দুটি অক্ষরের তুলনা করা যায় যা দেখতে একই রকম হয়। উভয় প্রশ্নেরই সেরা উত্তর ছিল এবং পরবর্তীতে একজন মধ্যস্থতার একজনের মধ্যে দ্বিতীয়টির সেরা উত্তরকে সেরা হিসাবে বেছে নেওয়া উভয় প্রশ্নকে একীভূত করা হয়েছিল। কেউ এই প্রশ্নটি সম্পাদনা করেছেন, যাতে এটি সংক্ষিপ্ত হয়ে যায়
সাবিন জ্যাকব

আসলে, আমি
সংশ্লেষের

24

সম্পাদনা এই প্রশ্নটি সি'র সাথে 'μ' এবং 'µ' এর সাথে কীভাবে তুলনা করা যায় তার সাথে একত্রীকরণের পরে
পোস্ট করুন মূল উত্তর:

 "μ".ToUpper().Equals("µ".ToUpper()); //This always return true.

সম্পাদনা করুন মন্তব্যগুলি পড়ার পরে, হ্যাঁ উপরের পদ্ধতিটি ব্যবহার করা ভাল নয় কারণ এটি অন্য কিছু ধরণের ইনপুটগুলির জন্য ভুল ফলাফল প্রদান করতে পারে, এর জন্য আমাদের উইকিতে উল্লিখিত পূর্ণাঙ্গ সামঞ্জস্যতা পচে যাওয়া স্বাভাবিক করে ব্যবহার করা উচিত । ( বোল্টক্লক পোস্ট করা উত্তরের জন্য ধন্যবাদ )

    static string GREEK_SMALL_LETTER_MU = new String(new char[] { '\u03BC' });
    static string MICRO_SIGN = new String(new char[] { '\u00B5' });

    public static void Main()
    {
        string Mus = "µμ";
        string NormalizedString = null;
        int i = 0;
        do
        {
            string OriginalUnicodeString = Mus[i].ToString();
            if (OriginalUnicodeString.Equals(GREEK_SMALL_LETTER_MU))
                Console.WriteLine(" INFORMATIO ABOUT GREEK_SMALL_LETTER_MU");
            else if (OriginalUnicodeString.Equals(MICRO_SIGN))
                Console.WriteLine(" INFORMATIO ABOUT MICRO_SIGN");

            Console.WriteLine();
            ShowHexaDecimal(OriginalUnicodeString);                
            Console.WriteLine("Unicode character category " + CharUnicodeInfo.GetUnicodeCategory(Mus[i]));

            NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormC);
            Console.Write("Form C Normalized: ");
            ShowHexaDecimal(NormalizedString);               

            NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormD);
            Console.Write("Form D Normalized: ");
            ShowHexaDecimal(NormalizedString);               

            NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormKC);
            Console.Write("Form KC Normalized: ");
            ShowHexaDecimal(NormalizedString);                

            NormalizedString = OriginalUnicodeString.Normalize(NormalizationForm.FormKD);
            Console.Write("Form KD Normalized: ");
            ShowHexaDecimal(NormalizedString);                
            Console.WriteLine("_______________________________________________________________");
            i++;
        } while (i < 2);
        Console.ReadLine();
    }

    private static void ShowHexaDecimal(string UnicodeString)
    {
        Console.Write("Hexa-Decimal Characters of " + UnicodeString + "  are ");
        foreach (short x in UnicodeString.ToCharArray())
        {
            Console.Write("{0:X4} ", x);
        }
        Console.WriteLine();
    }

আউটপুট

INFORMATIO ABOUT MICRO_SIGN    
Hexa-Decimal Characters of µ  are 00B5
Unicode character category LowercaseLetter
Form C Normalized: Hexa-Decimal Characters of µ  are 00B5
Form D Normalized: Hexa-Decimal Characters of µ  are 00B5
Form KC Normalized: Hexa-Decimal Characters of µ  are 03BC
Form KD Normalized: Hexa-Decimal Characters of µ  are 03BC
 ________________________________________________________________
 INFORMATIO ABOUT GREEK_SMALL_LETTER_MU    
Hexa-Decimal Characters of µ  are 03BC
Unicode character category LowercaseLetter
Form C Normalized: Hexa-Decimal Characters of µ  are 03BC
Form D Normalized: Hexa-Decimal Characters of µ  are 03BC
Form KC Normalized: Hexa-Decimal Characters of µ  are 03BC
Form KD Normalized: Hexa-Decimal Characters of µ  are 03BC
 ________________________________________________________________

তথ্য পড়ার সময় ইউনিকোড_ইকুইভ্যালেন্সে আমি খুঁজে পেয়েছি

সমতার মানদণ্ডের পছন্দ অনুসন্ধান ফলাফলগুলিকে প্রভাবিত করতে পারে। উদাহরণস্বরূপ U + এ FB03 (ffi) মত কিছু টাইপোগ্রাফিক ligatures ..... একটি যাতে অনুসন্ধান জন্য U + + 0066 (চ) সাবস্ট্রিং যেমন হবে সফল একটি ইন NFKC U + এ FB03 নিয়মমাফিককরণ কিন্তু নেই NFC এর U + এ FB03 নিয়মমাফিককরণ।

সুতরাং সমতার তুলনা করতে আমাদের সাধারণত ব্যবহার করা উচিত FormKCযেমন এনএফকেসি সাধারণীকরণ বাFormKD
আমি সমস্ত ইউনিকোড চরিত্র সম্পর্কে আরও জানতে আগ্রহী ছিলাম তাই আমি এমন নমুনা তৈরি করেছিলাম যা ইউনিকোডের সমস্ত চরিত্রের উপরে পুনরাবৃত্তি ঘটবে UTF-16এবং আমি কিছু ফলাফল পেয়েছি যেগুলি নিয়ে আলোচনা করতে চাই

  • এমন চরিত্রগুলি সম্পর্কে তথ্য যাগুলির FormCএবং FormDস্বাভাবিক মানগুলি সমতুল্য ছিল না
    Total: 12,118
    Character (int value): 192-197, 199-207, 209-214, 217-221, 224-253, ..... 44032-55203
  • এমন চরিত্রগুলি সম্পর্কে তথ্য যাগুলির FormKCএবং FormKDস্বাভাবিক মানগুলি সমতুল্য ছিল না
    Total: 12,245
    Character (int value): 192-197, 199-207, 209-214, 217-221, 224-228, ..... 44032-55203, 64420-64421, 64432-64433, 64490-64507, 64512-64516, 64612-64617, 64663-64667, 64735-64736, 65153-65164, 65269-65274
  • সমস্ত চরিত্র যার FormCএবং FormDস্বাভাবিক মানের মান সমতুল্য ছিল না, সেখানে FormKCএবং FormKDস্বাভাবিকীকৃত মানগুলিও এই অক্ষরগুলি ব্যতীত সমতুল্য নয়
    অক্ষর:901 '΅', 8129 '῁', 8141 '῍', 8142 '῎', 8143 '῏', 8157 '῝', 8158 '῞'
    , 8159 '῟', 8173 '῭', 8174 '΅'
  • অতিরিক্ত চরিত্রের যার FormKCএবং FormKDস্বাভাবিক মানের মান সমতুল্য নয়, তবে সেখানে FormCএবং FormDস্বাভাবিক মানের সমতুল্য
    Total: 119
    অক্ষর:452 'DŽ' 453 'Dž' 454 'dž' 12814 '㈎' 12815 '㈏' 12816 '㈐' 12817 '㈑' 12818 '㈒' 12819 '㈓' 12820 '㈔' 12821 '㈕', 12822 '㈖' 12823 '㈗' 12824 '㈘' 12825 '㈙' 12826 '㈚' 12827 '㈛' 12828 '㈜' 12829 '㈝' 12830 '㈞' 12910 '㉮' 12911 '㉯' 12912 '㉰' 12913 '㉱' 12914 '㉲' 12915 '㉳' 12916 '㉴' 12917 '㉵' 12918 '㉶' 12919 '㉷' 12920 '㉸' 12921 '㉹' 12922 '㉺' 12923 '㉻' 12924 '㉼' 12925 '㉽' 12926 '㉾' 13056 '㌀' 13058 '㌂' 13060 '㌄' 13063 '㌇' 13070 '㌎' 13071 '㌏' 13072 '㌐' 13073 '㌑' 13075 '㌓' 13077 '㌕' 13080 '㌘' 13081 '㌙' 13082 '㌚' 13086 '㌞' 13089 '㌡' 13092 '㌤' 13093 '㌥' 13094 '㌦' 13099 '㌫' 13100 '㌬' 13101 '㌭' 13102 '㌮' 13103 '㌯' 13104 '㌰' 13105 '㌱' 13106 '㌲' 13108 '㌴' 13111 '㌷' 13112 '㌸' 13114 '㌺' 13115 '㌻' 13116 '㌼' 13117 '㌽' 13118 '㌾' 13120 '㍀' 13130 '㍊' 13131 '㍋' 13132 '㍌' 13134 '㍎' 13139 '㍓' 13140 '㍔' 13142 '㍖' .......... ﺋ' 65164 'ﺌ' 65269 'ﻵ' 65270 'ﻶ' 65271 'ﻷ' 65272 'ﻸ' 65273 'ﻹ' 65274'
  • কিছু অক্ষর রয়েছে যা সাধারণ করা যায় না , ArgumentExceptionচেষ্টা করা হলে তারা ফেলে দেয়
    Total:2081 Characters(int value): 55296-57343, 64976-65007, 65534

এই লিঙ্কগুলি ইউনিকোডের সমতুল্যের জন্য নিয়মগুলি পরিচালনা করে তা বুঝতে সত্যিই সহায়ক হতে পারে

  1. ইউনিকোড_একুইভ্যালেন্স
  2. ইউনিকোড_কম্প্যাটিবিলিটি_চ্যাকার্টার

4
অদ্ভুত তবে কাজ করে ... আমার অর্থ তারা পৃথক পৃথক অর্থ সহ দুটি আলাদা চর এবং এটিকে উপরের রূপান্তর করে তাদের সমান করে তোলে? আমি যুক্তিটি দেখতে চাই না তবে দুর্দান্ত সমাধান +1
বুদব্রট

45
এই সমাধানটি সমস্যার মুখোশ দেয় এবং এটি সাধারণ ক্ষেত্রে সমস্যার কারণ হতে পারে। এই ধরণের পরীক্ষাটি এটি খুঁজে পেতে পারে "m".ToUpper().Equals("µ".ToUpper());এবং "M".ToUpper().Equals("µ".ToUpper());এটিও সত্য। এটি পছন্দসই নাও হতে পারে।
অ্যান্ড্রু লিচ

6
-1 - এটি একটি ভয়ানক ধারণা। ইউনিকোড নিয়ে এভাবে কাজ করবেন না।
কনরাড রুডল্ফ

4
টুপার () - ভিত্তিক কৌশলগুলি পরিবর্তে, স্ট্রিং.ইকুয়ালস ("μ", "μ", স্ট্রিংকম্পায়ার.কেন্দ্রিক কালচারআইগনরেস) ব্যবহার করবেন না কেন?
svenv

6
"মাইক্রো সাইন" এবং "গ্রিক স্মার্ট লেটার এমইউ" এর মধ্যে পার্থক্য করার একটি ভাল কারণ রয়েছে - মাইক্রো সাইনটির "বড় হাতের অক্ষর" এখনও মাইক্রো সাইন বলে। তবে মূলধনটি মাইক্রোতে পরিবর্তিত হয়, হ্যাপি ইঞ্জিনিয়ারিং।
গ্রেগ

9

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


6

আপনি "কীভাবে তাদের তুলনা করবেন" জিজ্ঞাসা করেছেন তবে আপনি কী করতে চান তা আমাদের জানান না।

তাদের তুলনা করার জন্য কমপক্ষে দুটি প্রধান উপায় রয়েছে:

হয় আপনি তাদের যেমন সরাসরি তেমন তুলনা করুন এবং সেগুলি আলাদা

অথবা আপনি যদি ইউনিকোড সামঞ্জস্যতা নরমালাইজেশন ব্যবহার করেন তবে যদি আপনার প্রয়োজনের তুলনা হয় যা তাদের সাথে মেলে।

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

আরও নির্দিষ্ট সমাধানের জন্য আমাদের আপনার নির্দিষ্ট সমস্যাটি জানতে হবে। আপনি কোন প্রসঙ্গের অধীনে এই সমস্যাটি জুড়ে এসেছেন?


4
"মাইক্রো সাইন" এবং লোয়ারকেস মিউ চরিত্রটি কি সাধারণভাবে সমান? ক্যানোনিকাল নরমালাইজেশন ব্যবহার করা আপনাকে আরও কঠোর তুলনা দেয়।
ট্যানার সোয়েট

@ ট্যানারএল.স্বেট: আসলে আমি কীভাবে আমার মাথার উপরের
অংশটি

4
আসলে, আমি পদার্থবিজ্ঞানের সূত্র সহ একটি ফাইল আমদানি করছিলাম। আপনি সাধারণীকরণ সম্পর্কে ঠিক বলেছেন। আমাকে আরও গভীরভাবে যেতে হবে ..
ডিজে

কি ধরনের ফাইল? কোনও ব্যক্তির প্লেইন ইউনিকোড পাঠ্যে হাতে তৈরি কিছু? বা কোনও নির্দিষ্ট বিন্যাসে কোনও অ্যাপ্লিকেশন দ্বারা আউটপুট কিছু?
হিপ্পিট্রেইল

5

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

প্রথমে, আপনি যে দুটি সত্তার তুলনা করার চেষ্টা করছেন তা glyphহ'ল একটি গ্লিফ হ'ল গ্লিফগুলির একটি সেট যা সাধারণত "ফন্ট" হিসাবে পরিচিত, যা সাধারণত একটি হিসাবে আসে ttf, otfবা যে কোনও ফাইল বিন্যাসে আসে ব্যবহার.

গ্লাইফগুলি একটি প্রদত্ত প্রতীকের প্রতিনিধিত্ব, এবং যেহেতু এগুলি একটি উপস্থাপনা যা একটি নির্দিষ্ট সেটের উপর নির্ভর করে, আপনি কেবল 2 টি অনুরূপ বা "আরও ভাল" অভিন্ন চিহ্ন হিসাবে প্রত্যাশা করতে পারবেন না, এটি এমন একটি বাক্যাংশ যা বোঝায় না আপনি যদি প্রসঙ্গটি বিবেচনা করেন, আপনি যখন এই জাতীয় কোনও প্রশ্ন তৈরি করেন তখন আপনার কমপক্ষে কোন ফন্ট বা গ্লাইফগুলির সেটটি বিবেচনা করা উচিত specify

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

ওসিআর সাধারণত সম্পদের ক্ষেত্রে ব্যয়বহুল এই বিষয়টি উল্লেখ না করে আপনি সম্ভবত একটি পদার্থ বিজ্ঞানের বইটিকে একটি প্রাচীন গ্রীক বই হিসাবে ব্যাখ্যা করে শেষ করতে পারেন।

এই চরিত্রগুলি স্থানীয়ভাবে স্থানীয়করণ করার কারণ রয়েছে, কেবল এটি করবেন না।


2

একই ফন্ট শৈলী এবং DrawStringপদ্ধতি সহ আকারের সাথে উভয় অক্ষর অঙ্কন করা সম্ভব । প্রতীক সহ দুটি বিটম্যাপ তৈরি হওয়ার পরে, তাদের পিক্সেল দ্বারা পিক্সেলের তুলনা করা সম্ভব।

এই পদ্ধতির সুবিধা হ'ল আপনি কেবল নিরঙ্কুশ সমান চার্টারের সাথে তুলনা করতে পারবেন না, তবে অনুরূপও (নির্দিষ্ট সহনশীলতার সাথে)।

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