سؤال

أنا أستخدم فئة StreamReader في .NET مثل هذا:

using( StreamReader reader = new StreamReader( "c:\somefile.html", true ) {
    string filetext = reader.ReadToEnd();
}

يعمل هذا بشكل جيد عندما يحتوي الملف على BOM.واجهت مشكلة مع ملف بدون BOM ..في الأساس حصلت على رطانة.عندما حددت Encoding.Unicode كان يعمل بشكل جيد، على سبيل المثال:

using( StreamReader reader = new StreamReader( "c:\somefile.html", Encoding.Unicode, false ) {
    string filetext = reader.ReadToEnd();
}

لذلك، أنا بحاجة للحصول على محتويات الملف في سلسلة.فكيف يتعامل الناس عادة مع هذا؟أعلم أنه لا يوجد حل ناجح بنسبة 100% في كل الأوقات، ولكنني أرغب في تحسين احتمالاتي..من الواضح أن هناك برامج تحاول التخمين (على سبيل المثال، المفكرة والمتصفحات وما إلى ذلك).هل هناك طريقة في إطار عمل .NET يمكنها التخمين بالنسبة لي؟هل لدى أي شخص بعض التعليمات البرمجية التي يرغب في مشاركتها؟

المزيد من الخلفية:هذا سؤال هو إلى حد كبير نفس ما عندي، ولكن أنا في .NET الأرض.قادني هذا السؤال إلى قائمة مدونة متنوعة كشف الترميز المكتبات، ولكن لا يوجد أي منها في .NET

نصائح أخرى

ويجب عليك قراءة هذا المقال من قبل ريمون تشن. ويستطرد في التفاصيل حول كيف يمكن للبرامج تخمين ما هو الترميز (وبعض من المتعة التي تأتي من التخمين)

http://blogs.msdn.com/oldnewthing /archive/2004/03/24/95235.aspx

كان لي حظا سعيدا مع بود, ، أ C# من الميناء Mozilla Universal Charset Detector.

تم تصميم UTF-8 بطريقة أنه من غير المحتمل أن يكون النص المشفرة في التعسفي 8bit الترميز مثل LATIN1 يتم فك الشفرة لالسليم باستخدام UTF-8.

وهكذا نهج الحد الأدنى هو هذا (شبة الكود، انا لا اتحدث .NET):

والمحاولة:    ش = some_text.decode ( "UTF-8") إلا UnicodeDecodeError:    ش = some_text.decode ( "الأكثر احتمالا ترميز")

لواحد الأكثر احتمالا ترميز عادة ما تستخدم على سبيل المثال LATIN1 أو cp1252 أو أيا كان. نهج أكثر تطورا قد يحاول ويجد حدودا حرف لغة معينة، لكنني لست على بينة من الأمر الذي يفعل ذلك كمكتبة أو بعض من هذا القبيل.

وأنا استخدم هذا لفعل شيء مماثل في حين يعود:

http://www.conceptdevelopment.net/Localization/NCharDet/

IsTextUnicode

استخدم Win32 ول.

في الشعور العام، بل هو promlem الصعبة. انظر: http://blogs.msdn.com/oldnewthing/ أرشيف / 2007/04/17 / 2158334.aspx .

وهناك تقنية hacky قد يكون لاتخاذ MD5 من النص، ثم فك شفرة النص وإعادة ترميز في مختلف ترميزات، MD5'ing كل واحد. إذا كان أحد المباريات التي أعتقد أنها أن الترميز.

وهذا هو الواضح بطيئة جدا عن شيء الذي يعالج الكثير من الملفات ولكن لشيء من هذا القبيل محرر نص I يمكن أن نرى ذلك العمل.

وبخلاف ذلك، سيكون الأيدي القذرة ترقية المكتبات جافا من <لأ href = "http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html" يختلط = "نوفولو noreferrer "> هذا المنصب التي جاءت من السؤال دلفي SO، أو باستخدام ميزة IE MLang.

وبي (الأخيرة) الإجابة على هذا (بقدر ما استطيع ان اقول، أي ما يعادل) السؤال: <لأ href = "https://stackoverflow.com/questions/90838/how-can-i-detect-the- ترميز المحارف من واحد في النص ملف / 5830273 # 5830273 "> كيف يمكنني الكشف عن الترميز / مخطط الشفرة من ملف نصي

وأنه لا يحاول أن يخمن عبر مجموعة من الممكنة ترميزات "الوطنية" مثل MLang وNCharDet به، بل يفترض أن تعرف أي نوع من الملفات غير يونيكود أنت من المحتمل أن تواجهها. بقدر ما استطيع ان اقول من سؤالك، فإنه ينبغي أن تعالج مشكلتك جميلة موثوق (دون الاعتماد على "الصندوق الاسود" من MLang).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top