সি # তে টুপার () এবং টুঅপারআইভারেন্ট () এর মধ্যে পার্থক্য কী?


133

সি # তে, ToUpper()এবং এর মধ্যে পার্থক্য কী ToUpperInvariant()?

ফলাফলগুলি আলাদা হতে পারে যেখানে আপনি একটি উদাহরণ দিতে পারেন?


3
[সংস্থা] এই প্রশ্নের "আন্তর্জাতিকীকরণ" ট্যাগ থাকা উচিত?
জাসো

উত্তর:


154

ToUpperবর্তমান সংস্কৃতি ব্যবহার করে। ToUpperInvariantআক্রমণকারী সংস্কৃতি ব্যবহার করে।

প্রচলিত উদাহরণটি তুরস্ক, যেখানে "i" এর উপরের অক্ষরটি "I" নয়।

পার্থক্য দেখাচ্ছে নমুনা কোড:

using System;
using System.Drawing;
using System.Globalization;
using System.Threading;
using System.Windows.Forms;

public class Test
{
    [STAThread]
    static void Main()
    {
        string invariant = "iii".ToUpperInvariant();
        CultureInfo turkey = new CultureInfo("tr-TR");
        Thread.CurrentThread.CurrentCulture = turkey;
        string cultured = "iii".ToUpper();

        Font bigFont = new Font("Arial", 40);
        Form f = new Form {
            Controls = {
                new Label { Text = invariant, Location = new Point(20, 20),
                            Font = bigFont, AutoSize = true},
                new Label { Text = cultured, Location = new Point(20, 100),
                            Font = bigFont, AutoSize = true }
            }
        };        
        Application.Run(f);
    }
}

তুর্কি সম্পর্কে আরও তথ্যের জন্য, এই তুরস্ক টেস্ট ব্লগ পোস্টটি দেখুন

আমি শুনে অবাক হব না যে প্রবীণ চরিত্রের চারপাশে অন্যান্য আরও বিভিন্ন মূলধন সংক্রান্ত সমস্যা রয়েছে। এটি কেবল একটি উদাহরণ যা আমি আমার মাথার উপরের অংশটি জানি part একটি স্ট্রিং আবরণ এবং এটি "মাইল" এর সাথে তুলনা করে। তুরস্কে এটি এত ভাল কাজ করে নি ...


45
হাহা আমি এই চিন্তাভাবনাটি পড়েছি ... "'তুরস্কের' চিঠিতে 'আই' নেই"
জেফ মার্কাডো

এটি প্রায় 2019 এবং আমি ভিজ্যুয়াল স্টুডিওতে তুরস্কের আঞ্চলিক সেটিংসের সাথে একটি "ইংরাজী" উইন্ডোতে তারিখ এবং সময়ের জন্য একটি "ইংরাজী" উইন্ডোতে কনসোলটিতে অভ্যন্তরীণ ত্রুটি স্প্যাম করার ımageজন্য Imageইউনিটি 3 ডি এবং ফিল্ডের নাম হিসাবে পরামর্শ দিচ্ছি Unable to find key name that matches 'rıght'। দেখে মনে হয় অনেক সময় এমনকি মাইক্রোসফ্টও তুরস্কের পরীক্ষায় ব্যর্থ হয়, একটি পিসির ভাষা এমনকি তুর্কি নয়, কেবলমাত্র ol
Guney Ozsan

28

জনের উত্তর নিখুঁত। আমি কেবল এটি যুক্ত করতে চেয়েছিলাম ToUpperInvariantকল করার মতো ToUpper(CultureInfo.InvariantCulture)

এটি জনের উদাহরণকে কিছুটা সহজ করে তুলেছে:

using System;
using System.Drawing;
using System.Globalization;
using System.Threading;
using System.Windows.Forms;

public class Test
{
    [STAThread]
    static void Main()
    {
        string invariant = "iii".ToUpper(CultureInfo.InvariantCulture);
        string cultured = "iii".ToUpper(new CultureInfo("tr-TR"));

        Application.Run(new Form {
            Font = new Font("Times New Roman", 40),
            Controls = { 
                new Label { Text = invariant, Location = new Point(20, 20), AutoSize = true }, 
                new Label { Text = cultured, Location = new Point(20, 100), AutoSize = true }, 
            }
        });
    }
}

আমি নিউ টাইমস রোমানও ব্যবহার করেছি কারণ এটি শীতল ফন্ট।

সম্পত্তিটি উত্তরাধিকারসূত্রে প্রাপ্ত বলে আমি দুটি নিয়ন্ত্রণের পরিবর্তে Formএর Fontসম্পত্তিও সেট করেছিলাম ।LabelFont

এবং আমি কমপ্যাক্ট (উদাহরণস্বরূপ, উত্পাদন নয়) কোডটি পছন্দ করি বলেই আমি কয়েকটি অন্যান্য লাইন হ্রাস করেছি।

এই মুহূর্তে আমার কাছে করার মতো আরও ভাল কিছু ছিল না।


5
"জনের উত্তর নিখুঁত।" অপ্রয়োজনীয় বক্তব্য সম্পর্কে কথা বলুন। ;)
ক্রিলগার

1
টুপার পদ্ধতিতে আমার জন্য কোনও পরামিতি ওভারলোড নেই? পুরানো সংস্করণ আছে? আমি তা পাই না
ব্যাটম্যাসি

: আমি জানি না, তা এখানে নথিভুক্ত হচ্ছে msdn.microsoft.com/en-us/library/system.string.toupper.aspx
Tergiver

15

এমএসডিএন দিয়ে শুরু করুন

http://msdn.microsoft.com/en-us/library/system.string.toupperinvariant.aspx

ToUpperInvariant পদ্ধতিটি TOUpper এর সাথে সমান (সংস্কৃতিআইফোন.আইভার্নিয়েন্ট সংস্কৃতি)

শুধু কারণ একটি রাজধানী আমি হয় 'আমি' ইংরেজিতে, সবসময় এটা এত দেখা যায় না।


12

String.ToUpperএবং String.ToLowerবিভিন্ন সংস্কৃতি দেওয়া বিভিন্ন ফলাফল দিতে পারে। সর্বাধিক পরিচিত উদাহরণটি তুর্কি উদাহরণ , যার জন্য ছোট হাতের ল্যাটিন "i" কে বড় হাতের সাথে রূপান্তর করা, এর ফলে মূলধন ল্যাটিন "I" হয় না, তুর্কি "I" হয়।

সংস্কৃতির উপর নির্ভর করে I এর মূলধন, উপরের সারি - ছোট হাতের অক্ষর, নিম্ন সারি - উপরের ক্ষেত্রে বর্ণগুলি

আমার পক্ষে এটি উপরের ছবিটি ( উত্স ) নিয়েও বিভ্রান্তিকর ছিল , তুর্কি উদাহরণের সঠিক ফলাফল দেখতে আমি একটি প্রোগ্রাম লিখেছি (নীচে উত্স কোড দেখুন):

# Lowercase letters
Character              | UpperInvariant | UpperTurkish | LowerInvariant | LowerTurkish
English i - i (\u0069) | I (\u0049)     | I (\u0130)   | i (\u0069)     | i (\u0069)
Turkish i - ı (\u0131) | ı (\u0131)     | I (\u0049)   | ı (\u0131)     | ı (\u0131)

# Uppercase letters
Character              | UpperInvariant | UpperTurkish | LowerInvariant | LowerTurkish
English i - I (\u0049) | I (\u0049)     | I (\u0049)   | i (\u0069)     | ı (\u0131)
Turkish i - I (\u0130) | I (\u0130)     | I (\u0130)   | I (\u0130)     | i (\u0069)

আপনি দেখতে পারেন:

  1. লোয়ার কেস চিঠিগুলি বড়ো করা এবং বড় হাতের অক্ষরগুলি হ্রাস করে আক্রমণকারী সংস্কৃতি এবং তুর্কি সংস্কৃতির জন্য আলাদা ফলাফল দেয়।
  2. বড় হাতের অক্ষরগুলি বড়ো করা এবং লোয়ার কেস লেটারগুলিকে ছোট করে রাখার কোনও প্রভাব নেই, সংস্কৃতি যাই হোক না কেন।
  3. Culture.CultureInvariant তুর্কি চরিত্র যেমন আছে তেমন ছেড়ে দেয়
  4. ToUpperএবং ToLowerবিপরীতমুখী, এটি একটি অক্ষর বড় আকারের পরে কম হ্রাস করা হয়, এটি মূল রূপে নিয়ে আসে, যতক্ষণ না উভয় ক্রিয়াকলাপের জন্য একই সংস্কৃতি ব্যবহৃত হত।

এমএসডিএন অনুসারে , চার.টুয়ার এবং চার.টোলওয়ার তুর্কি এবং আজারি একমাত্র প্রভাবিত সংস্কৃতি কারণ তারা একক-চরিত্রের আবরণের পার্থক্য সহ একমাত্র ব্যক্তি। স্ট্রিংগুলির জন্য, আরও বেশি সংস্কৃতি প্রভাবিত হতে পারে।


আউটপুট উত্পন্ন করতে ব্যবহৃত কনসোল অ্যাপ্লিকেশনটির উত্স কোড:

using System;
using System.Globalization;
using System.Linq;
using System.Text;

namespace TurkishI
{
    class Program
    {
        static void Main(string[] args)
        {
            var englishI = new UnicodeCharacter('\u0069', "English i");
            var turkishI = new UnicodeCharacter('\u0131', "Turkish i");

            Console.WriteLine("# Lowercase letters");
            Console.WriteLine("Character              | UpperInvariant | UpperTurkish | LowerInvariant | LowerTurkish");
            WriteUpperToConsole(englishI);
            WriteLowerToConsole(turkishI);

            Console.WriteLine("\n# Uppercase letters");
            var uppercaseEnglishI = new UnicodeCharacter('\u0049', "English i");
            var uppercaseTurkishI = new UnicodeCharacter('\u0130', "Turkish i");
            Console.WriteLine("Character              | UpperInvariant | UpperTurkish | LowerInvariant | LowerTurkish");
            WriteLowerToConsole(uppercaseEnglishI);
            WriteLowerToConsole(uppercaseTurkishI);

            Console.ReadKey();
        }

        static void WriteUpperToConsole(UnicodeCharacter character)
        {
            Console.WriteLine("{0,-9} - {1,10} | {2,-14} | {3,-12} | {4,-14} | {5,-12}",
                character.Description,
                character,
                character.UpperInvariant,
                character.UpperTurkish,
                character.LowerInvariant,
                character.LowerTurkish
            );
        }

        static void WriteLowerToConsole(UnicodeCharacter character)
        {
            Console.WriteLine("{0,-9} - {1,10} | {2,-14} | {3,-12} | {4,-14} | {5,-12}",
                character.Description,
                character,
                character.UpperInvariant,
                character.UpperTurkish,
                character.LowerInvariant,
                character.LowerTurkish
            );
        }
    }


    class UnicodeCharacter
    {
        public static readonly CultureInfo TurkishCulture = new CultureInfo("tr-TR");

        public char Character { get; }

        public string Description { get; }

        public UnicodeCharacter(char character) : this(character, string.Empty) {  }

        public UnicodeCharacter(char character, string description)
        {
            if (description == null) {
                throw new ArgumentNullException(nameof(description));
            }

            Character = character;
            Description = description;
        }

        public string EscapeSequence => ToUnicodeEscapeSequence(Character);

        public UnicodeCharacter LowerInvariant => new UnicodeCharacter(Char.ToLowerInvariant(Character));

        public UnicodeCharacter UpperInvariant => new UnicodeCharacter(Char.ToUpperInvariant(Character));

        public UnicodeCharacter LowerTurkish => new UnicodeCharacter(Char.ToLower(Character, TurkishCulture));

        public UnicodeCharacter UpperTurkish => new UnicodeCharacter(Char.ToUpper(Character, TurkishCulture));


        private static string ToUnicodeEscapeSequence(char character)
        {
            var bytes = Encoding.Unicode.GetBytes(new[] {character});
            var prefix = bytes.Length == 4 ? @"\U" : @"\u";
            var hex = BitConverter.ToString(bytes.Reverse().ToArray()).Replace("-", string.Empty);
            return $"{prefix}{hex}";
        }

        public override string ToString()
        {
            return $"{Character} ({EscapeSequence})";
        }
    }
}

মামলার টেবিলটি খুব সহায়ক ছিল। ধন্যবাদ!
ভোটকফি


2

ইংরেজিতে কোনও পার্থক্য নেই। শুধুমাত্র তুর্কি সংস্কৃতিতে একটি পার্থক্য পাওয়া যাবে।


13
এবং আপনি নিশ্চিত যে তুর্কি বিশ্বের একমাত্র সংস্কৃতি যার ইংরেজির চেয়ে বড় হাতের অক্ষর রয়েছে? আমি দেখলাম এটাতে বিশ্বাস করা কঠিন.
জোয়েল মুয়েলার

3
তুর্কি বেশিরভাগ ক্ষেত্রে ব্যবহৃত উদাহরণ, তবে একমাত্র নয়। আর এটি ভাষা, সংস্কৃতি নয় যা আমার চারটি আলাদা। তবুও, তুর্কি জন্য +1।
আর্মস্ট্রোনজেস্ট

অবশ্যই কিছু অন্য অবশ্যই আছে। বেশিরভাগ
পিপিএল

8
অবশ্যই তারা করবে। ওয়েব অ্যাপ্লিকেশনগুলি বিশ্বের জন্য উন্মুক্ত এবং আপনার পরামিতিগুলি সেট করা ভাল। আপনি যদি এমন কোনও লিগ্যাসি ডাটাবেসে পরিচালনা করছেন যা ইউনিকোড না করে? আপনি কোন ব্যবহারকারীর নাম হিসাবে অক্ষর গ্রহণ করবেন? আপনি যদি গ্রাহকের নামগুলি সিওবিএলে নির্মিত কোনও লিগ্যাসি ইআরপিতে রাখতে চান? প্রচুর ক্ষেত্রে যেখানে সংস্কৃতি গুরুত্বপূর্ণ। তারিখ এবং সংখ্যা উল্লেখ করার দরকার নেই। 4.54 কিছু ভাষায় 4,54 রচিত। এই অন্যান্য ভাষার অস্তিত্ব নেই বলে ভান করা আপনাকে দীর্ঘকালীন সময়ে পাবেন না।
আর্মস্ট্রোনজেস্ট

স্পষ্টতই সংস্কৃতিগুলি তারিখ এবং সংখ্যাগুলির জন্য গুরুত্বপূর্ণ, আমি কেবল বলছি বেশিরভাগ পিপিএল কখনই সেই ভাষাগুলির সাথে দেখা করতে পারে না যা টুআপার এবং টুঅপারআইভারিয়েন্টে আলাদা ফলাফল রাখে।
স্টিফানভিডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.