আমি কীভাবে কোনও পাঠ্য ফাইলের এনকোডিং / কোডপেজ সনাক্ত করতে পারি


295

আমাদের অ্যাপ্লিকেশন, আমরা টেক্সট ফাইল (গ্রহণ .txt, .csvবিভিন্ন উৎস থেকে, ইত্যাদি)। পড়ার সময়, এই ফাইলগুলিতে কখনও কখনও আবর্জনা থাকে, কারণ ফাইলগুলি যেখানে অন্য / অজানা কোডেজে তৈরি হয়েছিল।

কোনও পাঠ্য ফাইলের কোডপেজ সনাক্ত করার (স্বয়ংক্রিয়ভাবে) উপায় আছে কি?

detectEncodingFromByteOrderMarks, উপর StreamReaderকন্সট্রাকটর, জন্য কাজ করে UTF8 এবং অন্যান্য ইউনিকোড চিহ্নিত ফাইল, কিন্তু আমি, কোড পৃষ্ঠাগুলি মুছে ফেলার মত একটি উপায় খুঁজছি ibm850, windows1252


আপনার উত্তরগুলির জন্য ধন্যবাদ, আমি এটিই করেছি।

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

সমাধান:

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

উত্তর:


260

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

যাইহোক, আপনার যা পড়তে হবে এটি হ'ল: সর্বনিম্ন ন্যূনতম প্রতিটি সফ্টওয়্যার বিকাশকারী অবশ্যই, ইউনিকোড এবং চরিত্রের সেটগুলি সম্পর্কে ধনাত্মকভাবে জানতে হবে (কোনও বাহানা নেই!)

বিশেষত জোয়েল বলেছেন:

এনকোডিংগুলির সম্পর্কে একক অতি গুরুত্বপূর্ণ বিষয়

আমি কেবল ব্যাখ্যা করা সমস্ত কিছু আপনি যদি পুরোপুরি ভুলে যান তবে দয়া করে একটি অত্যন্ত গুরুত্বপূর্ণ ঘটনা মনে রাখবেন। এটি কোন এনকোডিংটি ব্যবহার করে তা না জেনে স্ট্রিং থাকা কোনও মানে হয় না। আপনি আর বালিতে মাথা ঠেকাতে পারবেন না এবং "সাধারণ" পাঠ্যটি ASCII বলে ভান করতে পারবেন না। সাধারণ পাঠ্য হিসাবে তেমন কোনও জিনিস নেই।

আপনার যদি স্ট্রিং, মেমরি, কোনও ফাইল বা ইমেল বার্তায় থাকে তবে আপনাকে এটি এনকডিংটি কী তা জানতে হবে বা আপনি এটি ব্যাখ্যা করতে পারবেন না বা এটি ব্যবহারকারীদের কাছে সঠিকভাবে প্রদর্শন করতে পারবেন না।


43
আমি এই কারণটিকে দুটি কারণে বাদ দিয়েছি। প্রথমত, "আপনাকে বলা দরকার" বলা কার্যকর নয়। কে আমাকে বলবে এবং তারা কোন মাধ্যমের মাধ্যমে এটি করবে? আমিই সেই ফাইলটি সেভ করে দিলে আমি কাকে জিজ্ঞাসা করব? নিজেকে? দ্বিতীয়ত, নিবন্ধটি প্রশ্নের উত্তর দেওয়ার জন্য একটি উত্স হিসাবে বিশেষভাবে সহায়ক নয়। নিবন্ধটি ডেভিড সেদারিস স্টাইলে রচিত এনকোডিংয়ের ইতিহাস of আমি আখ্যানটির প্রশংসা করি তবে এটি সরাসরি / সরাসরি প্রশ্নের উত্তর দেয় না।
জেনারোমা

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

4
@ জেনোর্মা, অব্যাহত ... অবশেষে, আমি অনুমান করি যে নিবন্ধটি প্রশ্নের উত্তর না দেওয়ার মূল কারণটি কারণ এই প্রশ্নের কোনও সাধারণ উত্তর নেই। যদি প্রশ্নটি হয় "আমি কীভাবে অনুমান করতে পারি ..." তবে আমি অন্যরকম উত্তর দিতে পারতাম।
জেভি।

1
@ জেভি আমি পরে শিখেছি যে এক্সএমএল / এইচটিএমএল অক্ষর এনকোডিং নির্দিষ্ট করতে পারে, সেই দরকারী টিডবিট উল্লেখ করার জন্য ধন্যবাদ thanks
জেনারোমা

1
@ জেভি "" একটি ফাইল তৈরি করুন "শব্দগুলির দুর্বল পছন্দ হতে পারে। আমি ধরে নিয়েছি যে কোনও ব্যবহারকারী কোনও ফাইলের এনকোডিং নির্দিষ্ট করতে পারে যা ব্যবহারকারী উত্পন্ন করে। সম্প্রতি আমি হাইড ব্যবহার করে একটি হডুপ ক্লাস্টার থেকে একটি ফাইল "তৈরি" করেছি এবং এটি বিভিন্ন ক্লায়েন্ট মেশিনে ডাউনলোড করার আগে এটিকে একটি এফটিপিতে দিয়েছি। ফলাফলটিতে কিছু ইউনিকোড আবর্জনা ছিল, তবে কোন পদক্ষেপটি এই সমস্যাটি তৈরি করেছিল তা আমি জানি না। আমি কখনও স্পষ্টভাবে এনকোডিং নির্দিষ্ট করতে পারি নি। আমি আশা করি যে প্রতিটি পদক্ষেপে আমি এনকোডিংটি পরীক্ষা করতে পারি।
জেনোরোমা

31

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


9
মজাদারভাবে যথেষ্ট পরিমাণে আমার ফায়ারফক্স 3.0.০৫ ইনস্টলেশনটি সেই পৃষ্ঠাটিকে ইউটিএফ -৮ হিসাবে সনাক্ত করে, যা হায়ার্ড উইন্ডো -১২২২ এর একটি মেটা ট্যাগ রয়েছে, যদিও বেশ কয়েকটি প্রশ্ন-চিহ্ন-ইন-হ-ডায়মন্ড গ্লিফগুলি দেখায়। চরিত্রের এনকোডিংটি ম্যানুয়ালি পরিবর্তন করে ডকুমেন্টটি সঠিকভাবে দেখায়।
ডেভস্টফ

5
আপনার বাক্য "যদি আপনি নন-ইউটিএফ এনকোডিংগুলি সনাক্ত করতে চাইছেন (যেমন কোনও বিওএম নেই)" সামান্য বিভ্রান্তিকর; ইউনিকোড স্ট্যান্ডার্ডটি ইউএফ -8 নথিগুলিতে একটি বিওএম যুক্ত করার পরামর্শ দেয় না! (এবং এই প্রস্তাবনা বা এর অভাব অনেক মাথাব্যথার উত্স)। সুত্র: en.wikipedia.org/wiki/Byte_order_mark#UTF-8
তাও

এটি সম্পন্ন করা হয়েছে যাতে আপনি রিলান্ট্যান্ট বিওএমগুলি সংগ্রহ না করে আপনি ইউটিএফ -8 স্ট্রিংগুলি সংযুক্ত করতে পারেন। এছাড়াও, ইউটিএফ -8 এর জন্য বাইটি-অর্ডার চিহ্নের দরকার নেই, উদাহরণস্বরূপ ইউটিএফ -16 এর থেকে পৃথক।
সাশোম

26

আপনি কি মজিলা ইউনিভার্সাল চরসেট সনাক্তকারীর জন্য সি # পোর্ট চেষ্টা করেছেন?

Http://code.google.com/p/ude/ এর উদাহরণ

public static void Main(String[] args)
{
    string filename = args[0];
    using (FileStream fs = File.OpenRead(filename)) {
        Ude.CharsetDetector cdet = new Ude.CharsetDetector();
        cdet.Feed(fs);
        cdet.DataEnd();
        if (cdet.Charset != null) {
            Console.WriteLine("Charset: {0}, confidence: {1}", 
                 cdet.Charset, cdet.Confidence);
        } else {
            Console.WriteLine("Detection failed.");
        }
    }
}    

1
উইন্ডোজ -122 টাইপের জন্য নির্দোষভাবে কাজ করেছেন।
সবিস্কুট

এবং আপনি এটি ব্যবহার করে স্ট্রিংয়ের জন্য কোনও পাঠ্য ফাইলটি পড়তে কীভাবে ব্যবহার করতে পারেন? চরসেটডেক্টর স্ট্রিং ফর্ম্যাটে এনকোডিংয়ের নামটি ফিরিয়ে দেয় এবং এটাই ...
বার্তোস্জ

@ বার্টোস private Encoding GetEncodingFromString(string encoding) { try { return Encoding.GetEncoding(encoding); } catch { return Encoding.ASCII; } }
প্রাইভেটপাইল

15

আপনি কোডপেজ সনাক্ত করতে পারবেন না

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

যুক্তিসঙ্গত পরিমাণে পাঠ্য দেওয়া, এটি ভাষা সনাক্ত করাও সম্ভব।

গুগল ব্যবহার করে আমি সবেমাত্র এখানে আরেকটি পেয়েছি:


39
"হিউরিস্টিকস" - সুতরাং ব্রাউজারটি এটি যথেষ্ট সনাক্ত করতে পারে না, এটি একটি শিক্ষিত অনুমান করছে। "সত্যিই খুব ভাল কাজ করে" - সুতরাং এটি তখন সব সময় কাজ করে না? আমার মত শোনায় আমরা চুক্তিতে রয়েছি।
জেভি।

10
এইচটিএমএলের মানটি নির্দেশ করে যে, যদি অক্ষর সেটটি নথির দ্বারা সংজ্ঞায়িত না করা হয়, তবে এটি ইউটিএফ -8 হিসাবে এনকোড করা হিসাবে বিবেচনা করা উচিত।
জন ট্রান্টভিন

5
আমরা অ-স্ট্যান্ডার্ড এইচটিএমএল ডকুমেন্টগুলি না পড়লে কোনটি দুর্দান্ত। বা নন- এইচটিএমএল নথি।
কোস

2
এই উত্তরটি ভুল, তাই আমাকে ডাউনওয়েট করতে হয়েছিল। এটি মিথ্যা বলবেন যে আপনি কোডপেজটি সনাক্ত করতে পারবেন না, এটি ভুল। আপনি অনুমান করতে পারেন এবং আপনার অনুমানগুলি বরং ভাল হতে পারে তবে আপনি একটি কোডপেজ "সনাক্ত" করতে পারবেন না।
z80 ক্রু 13

1
@ জনট্রন্টভেইন এইচটিএমএল 5 স্পেস অনুসারে a character encoding declaration is required even if the encoding is US-ASCII- অভাব ঘোষণার ফলশ্রুতিতে ইউটিএফ 8-তে ফিরে না আসার ফলে হিউরিস্টিক অ্যালগরিদম ব্যবহারের ফলস্বরূপ।
z80 13

9

আমি জানি যে এই প্রশ্নের জন্য খুব দেরি হয়ে গেছে এবং এই সমাধানটি কারও কাছে আবেদন করবে না (কারণ এর ইংরেজি কেন্দ্রিক পক্ষপাত এবং এর পরিসংখ্যান / অভিজ্ঞতা অভিজ্ঞতা না থাকায়) তবে এটি আমার জন্য বিশেষত আপলোড হওয়া সিএসভি ডেটা প্রক্রিয়াকরণের জন্য খুব ভালভাবে কাজ করেছে:

http://www.architectshack.com/TextFileEncodingDetector.ashx

সুবিধাদি:

  • অন্তর্নির্মিত বিওএম সনাক্তকরণ
  • ডিফল্ট / ফ্যালব্যাক এনকোডিং অনুকূলিতকরণযোগ্য
  • ইউটিএফ -8 এবং লাতিন-1-স্টাইলের ফাইলগুলির মিশ্রণ সহ কিছু বিদেশী ডেটা (উদাহরণস্বরূপ ফরাসি নাম) যুক্ত পশ্চিমা-ইওরোপীয়-ভিত্তিক ফাইলগুলির জন্য বেশ নির্ভরযোগ্য (আমার অভিজ্ঞতায়) - মূলত মার্কিন যুক্তরাষ্ট্র এবং পশ্চিমা ইউরোপীয় পরিবেশের বেশিরভাগ অংশ।

দ্রষ্টব্য: আমিই এই ক্লাসটি লিখেছি, সুতরাং স্পষ্টতই এটি একটি নুনের দানার সাথে নিয়ে নিন! :)



7

বিভিন্ন সমাধান খুঁজছি, আমি এটি খুঁজে পেয়েছি

https://code.google.com/p/ude/

এই সমাধান কন্ডা ভারী।

4 টি প্রথম বাইট এবং সম্ভবত এক্সএমএল চরসেট সনাক্তকরণের ভিত্তিতে আমার কিছু বেসিক এনকোডিং সনাক্তকরণের প্রয়োজন ছিল - তাই আমি ইন্টারনেট থেকে কিছু নমুনা উত্স কোড নিয়েছি এবং এর সামান্য পরিবর্তিত সংস্করণ যুক্ত করেছি

http://lists.w3.org/Archives/Public/www-validator/2002Aug/0084.html

জাভা জন্য লেখা।

    public static Encoding DetectEncoding(byte[] fileContent)
    {
        if (fileContent == null)
            throw new ArgumentNullException();

        if (fileContent.Length < 2)
            return Encoding.ASCII;      // Default fallback

        if (fileContent[0] == 0xff
            && fileContent[1] == 0xfe
            && (fileContent.Length < 4
                || fileContent[2] != 0
                || fileContent[3] != 0
                )
            )
            return Encoding.Unicode;

        if (fileContent[0] == 0xfe
            && fileContent[1] == 0xff
            )
            return Encoding.BigEndianUnicode;

        if (fileContent.Length < 3)
            return null;

        if (fileContent[0] == 0xef && fileContent[1] == 0xbb && fileContent[2] == 0xbf)
            return Encoding.UTF8;

        if (fileContent[0] == 0x2b && fileContent[1] == 0x2f && fileContent[2] == 0x76)
            return Encoding.UTF7;

        if (fileContent.Length < 4)
            return null;

        if (fileContent[0] == 0xff && fileContent[1] == 0xfe && fileContent[2] == 0 && fileContent[3] == 0)
            return Encoding.UTF32;

        if (fileContent[0] == 0 && fileContent[1] == 0 && fileContent[2] == 0xfe && fileContent[3] == 0xff)
            return Encoding.GetEncoding(12001);

        String probe;
        int len = fileContent.Length;

        if( fileContent.Length >= 128 ) len = 128;
        probe = Encoding.ASCII.GetString(fileContent, 0, len);

        MatchCollection mc = Regex.Matches(probe, "^<\\?xml[^<>]*encoding[ \\t\\n\\r]?=[\\t\\n\\r]?['\"]([A-Za-z]([A-Za-z0-9._]|-)*)", RegexOptions.Singleline);
        // Add '[0].Groups[1].Value' to the end to test regex

        if( mc.Count == 1 && mc[0].Groups.Count >= 2 )
        {
            // Typically picks up 'UTF-8' string
            Encoding enc = null;

            try {
                enc = Encoding.GetEncoding( mc[0].Groups[1].Value );
            }catch (Exception ) { }

            if( enc != null )
                return enc;
        }

        return Encoding.ASCII;      // Default fallback
    }

এটি ফাইল থেকে সম্ভবত প্রথম 1024 বাইট পড়ার পক্ষে যথেষ্ট তবে আমি পুরো ফাইলটি লোড করছি।


7

যদি কেউ 93.9% সমাধান খুঁজছেন। এটি আমার পক্ষে কাজ করে:

public static class StreamExtension
{
    /// <summary>
    /// Convert the content to a string.
    /// </summary>
    /// <param name="stream">The stream.</param>
    /// <returns></returns>
    public static string ReadAsString(this Stream stream)
    {
        var startPosition = stream.Position;
        try
        {
            // 1. Check for a BOM
            // 2. or try with UTF-8. The most (86.3%) used encoding. Visit: http://w3techs.com/technologies/overview/character_encoding/all/
            var streamReader = new StreamReader(stream, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true), detectEncodingFromByteOrderMarks: true);
            return streamReader.ReadToEnd();
        }
        catch (DecoderFallbackException ex)
        {
            stream.Position = startPosition;

            // 3. The second most (6.7%) used encoding is ISO-8859-1. So use Windows-1252 (0.9%, also know as ANSI), which is a superset of ISO-8859-1.
            var streamReader = new StreamReader(stream, Encoding.GetEncoding(1252));
            return streamReader.ReadToEnd();
        }
    }
}

খুব সুন্দর সমাধান। 2 টিরও বেশি এনকোডিং (ইউটিএফ -8 এবং এএসসিআই 1252) অনুমতি দেওয়া হলে মঞ্জুরিপ্রাপ্ত এনকোডিংগুলির একটি লুপে সহজেই ReadAsString () এর শরীর মুড়ে দেওয়া যায়।
ViRuSTriNiTy

অনেকগুলি উদাহরণ চেষ্টা করার পরে, অবশেষে আপনার কাছে পেলাম। আমি এখনই একটি সুখী জায়গায় আছি am LOL ধন্যবাদ !!!!!!!
সেডরিক

এটি কীভাবে 1252 বনাম 1250 সনাক্ত করতে হবে তার উত্তর নাও হতে পারে তবে এটি কোনও বিওএমের সাথে বা ছাড়াই "ইউটিএফ -8 কীভাবে সনাক্ত করতে হয়" এর জন্য একেবারে উত্তর হওয়া উচিত !!
চক

4

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

সেই অভিধানটি (হ্যাশ) দেওয়া, আপনি নিজের ইনপুট পাঠ্য এবং:

  • যদি এটি কোনও বিওএম অক্ষর (UTF-16-BE- এর জন্য '\ xfe \ xff', UTF-16-LE- এর জন্য '\ xff \ xfe', UTF-8 ইত্যাদির জন্য '\ xff \ xbb \ xbf') দিয়ে শুরু হয়, আমি ' প্রস্তাবিত হিসাবে এটি আচরণ
  • যদি না হয়, তবে পাঠ্যের একটি বৃহত পরিমাণে নমুনা নিন, নমুনার সমস্ত বাইট-জোড়া নিন এবং অভিধান থেকে কমপক্ষে প্রস্তাবিত এনকোডিংটি চয়ন করুন।

আপনি যদি ইউটিএফ এনকোডযুক্ত পাঠ্যগুলির নমুনাও করেন যা কোনও বিওএম দিয়ে শুরু হয় না , তবে দ্বিতীয় ধাপটি প্রথম ধাপ থেকে পিছলে গেছে cover

এখনও অবধি, এটি আমার জন্য কাজ করে (নমুনা ডেটা এবং পরবর্তী ইনপুট ডেটা বিভিন্ন ভাষায় সাবটাইটেল হয়) হ্রাসকারী ত্রুটির হারের সাথে।


4

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

উবুন্টু উপর, আপনি শুধু apt-get install uchardet

অন্যান্য সিস্টেমে, উত্স, ব্যবহার এবং দস্তাবেজগুলি এখানে পান: https://github.com/BYVoid/uchardet


হোমব্রিউয়ের মাধ্যমে ম্যাকে:brew install uchardet
পল বি

3

স্ট্রিমরিডার শ্রেণীর নির্মাতা একটি 'সনাক্তকরণ এনকোডিং' প্যারামিটার নেয়।


এটি কেবল এখানে "এনকোডিং" লিঙ্কটি রয়েছে .. এবং বিবরণে বলা হয়েছে যে আমাদের এনকোডিং সরবরাহ করতে হবে ..
সুরজ

@ সুরজস: অন্যান্য ওভারলোডগুলি দেখুন।
লেপি

মূল লেখক কোনও ফাইলের জন্য এনকোডিং সনাক্ত করতে চান, যার মধ্যে বিওএম মার্কার নাও থাকতে পারে। স্ট্রিমরাইডার স্বাক্ষর অনুসারে বিওএম হেডার থেকে এনকোডিং সনাক্ত করে। পাবলিক স্ট্রিমরিডার (স্ট্রিম স্ট্রিম, বুল ডিটেক্ট এনকোডিংফ্রাইট অর্ডারমার্কস)
আইবোনডে

1

আপনি যদি সি লাইব্রেরিতে লিঙ্ক করতে পারেন তবে আপনি ব্যবহার করতে পারেন libencaHttp://cihar.com/software/enca/ দেখুন । ম্যান পৃষ্ঠা থেকে:

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

এটি জিপিএল ভি 2।


0

একই সমস্যা পেয়েছে তবে এটি স্বয়ংক্রিয়ভাবে সনাক্ত করার জন্য এখনও কোনও ভাল সমাধান খুঁজে পেল না। এখন আমি তার জন্য পিএসপ্যাড (www.pspad.com) ব্যবহার করছি;) ভাল কাজ করে


0

যেহেতু এটি মূলত হিউরিস্টিক্সে নেমে আসে তাই এটি একই উত্স থেকে প্রথম প্রাপ্ত ফাইলগুলির এনকোডিংটিকে প্রথম ইঙ্গিত হিসাবে ব্যবহার করতে সহায়তা করতে পারে।

বেশিরভাগ লোক (বা অ্যাপ্লিকেশন) প্রায় একই মেশিনে প্রায় একই ক্রমে স্টাফ করেন, সুতরাং সম্ভবত এটি সম্ভবত সম্ভবত বব যখন একটি .csv ফাইল তৈরি করে এবং মেরির কাছে প্রেরণ করে তখন এটি সর্বদা উইন্ডোজ -১২২২ ব্যবহার করবে বা তার যন্ত্রে ডিফল্ট যাই হোক না কেন।

যেখানে সম্ভব গ্রাহক প্রশিক্ষণের কিছুটা কখনই আঘাত করে না :-)


0

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

সুতরাং যেখানে আমি প্রথম করছিলাম: স্ট্রিমরিডার ফাইল = ফাইল.অপেনটেক্সট (পূর্ণাঙ্গ ফাইল);

আমাকে এটিতে পরিবর্তন করতে হয়েছিল: স্ট্রিমরিডার ফাইল = নতুন স্ট্রিমরিডার (ফুলফিলাম, সিস্টেম.টেক্সট। এনকোডিং UT আউটফ 7);

ওপেন টেক্সট ধরেছে এটি ইউটিএফ -8।

আপনি এই নতুন স্ট্রিমরিডার (ফুলফিলাম, সত্য) এর মতো স্ট্রিমরেডারও তৈরি করতে পারেন, দ্বিতীয় প্যারামিটারটির অর্থ এটি ফাইলের বাইটর্ডারমার্ক থেকে এনকোডিংটি চেষ্টা এবং সনাক্ত করা উচিত তবে এটি আমার ক্ষেত্রে কার্যকর হয়নি।


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

0

অ্যাকেলপ্যাডে ফাইলটি খুলুন (বা কেবল একটি গার্ভড পাঠ্য অনুলিপি করুন / আটকান), সম্পাদনা -> নির্বাচন -> পুনর্নির্মাণে যান ... -> "অটোডেক্টেক্ট" পরীক্ষা করুন।


0

আইটিমিজে পোস্টে অ্যাডন হিসাবে, আমি মোজিলা ইউনিভার্সাল চরসেট ডিটেক্টরের জন্য সি # পোর্টের আউটপুট রূপান্তর করতে এই ফাংশনটি ব্যবহার করেছি

    private Encoding GetEncodingFromString(string codePageName)
    {
        try
        {
            return Encoding.GetEncoding(codePageName);
        }
        catch
        {
            return Encoding.ASCII;
        }
    }

দুটিই MSDN


0

ধন্যবাদ @ এরিক আরোনাস্টি উল্লেখ করার জন্য uchardet

এদিকে (? একই) টুল লিনাক্সের জন্য বিদ্যমান: chardet
অথবা, cygwin উপর আপনি ব্যবহার করতে চান করতে পারেন: chardetect

দেখুন: চারডিট ম্যান পৃষ্ঠা: https://www.commandlinux.com/man-page/man1/chardetect.1.html

এটি তাত্ক্ষণিকভাবে প্রতিটি প্রদত্ত ফাইলের জন্য অক্ষর এনকোডিং সনাক্ত করবে (অনুমান) এবং প্রতিটি ফাইলের সনাক্ত করা অক্ষর এনকোডিংয়ের জন্য নাম এবং আত্মবিশ্বাসের স্তরের প্রতিবেদন করবে।


-1

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

'Works for Default and unicode (auto detect)
Dim mystreamreader As New StreamReader(LocalFileName, Encoding.Default) 
MyEditTextBox.Text = mystreamreader.ReadToEnd()
Debug.Print(mystreamreader.CurrentEncoding.CodePage) 'Autodetected encoding
mystreamreader.Close()

-1

এটি জিজ্ঞাসা করার পরে 10 ওয়াই (!) পেরিয়ে গেছে এবং এখনও আমি এমএস-এর ভাল, জিপিএলবিহীন সমাধানের কোনও উল্লেখ দেখতে পাচ্ছি না: ইমল্টিএলজিওয়েজ 2 এপিআই।

ইতিমধ্যে উল্লিখিত বেশিরভাগ গ্রন্থাগারগুলি মজিলার ইউডিই-র উপর ভিত্তি করে - এবং এটি যুক্তিসঙ্গত বলে মনে হয় যে ব্রাউজারগুলি ইতিমধ্যে অনুরূপ সমস্যাগুলি মোকাবেলা করেছে। ক্রোমের সমাধান কী তা আমি জানি না, তবে যেহেতু IE 5.0 এমএস তাদের সমাধান প্রকাশ করেছে এবং তা হ'ল:

  1. জিপিএল-এবং-এর মতো লাইসেন্সিং ইস্যু মুক্ত,
  2. সমর্থিত এবং বজায় রাখা সম্ভবত চিরকাল,
  3. সমৃদ্ধ আউটপুট দেয় - আত্মবিশ্বাস স্কোর সহ এনকোডিং / কোডপেজের জন্য সমস্ত বৈধ প্রার্থী,
  4. আশ্চর্যজনকভাবে ব্যবহার করা সহজ (এটি একটি একক ফাংশন কল)।

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

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