أفضل طريقة لتحليل ملفات ANSI و UTF-16LE باستخدام Python 2/3؟

StackOverflow https://stackoverflow.com/questions/819396

  •  03-07-2019
  •  | 
  •  

سؤال

لدي مجموعة من الملفات المشفرة في ANSI أو UTF-16LE. أود أن يفتح Python الملفات باستخدام الترميز الصحيح. المشكلة هي أن ملفات ANSI لا ترفع أي نوع من الاستثناءات عند الترميز باستخدام UTF-16LE والعكس بالعكس.

هل هناك طريقة مباشرة لفتح الملفات باستخدام ترميز الملف الصحيح؟

هل كانت مفيدة؟

المحلول

استخدم ال شارديت مكتبة لاكتشاف الترميز.

نصائح أخرى

يمكنك التحقق من بوم في بداية الملف للتحقق مما إذا كان UTF.

ثم unicode.decode وفقا لذلك (باستخدام واحد من الترميزات القياسية).

تعديلأو ، ربما ، جرب S.Decode ('Ascii') سلسلة (المعطى S هو الاسم المتغير). إذا كان يلقي UnicodEdEcodeerror ، فافتحمه على أنه "UTF_16_LE".

ماذا يوجد في الملفات؟ إذا كان نصًا عاديًا في الأبجدية اللاتينية ، فسيكون كل من ملفات UTF-16LE تقريبًا صفراً. في ملفات Windows-1252 ، من ناحية أخرى ، لا أتوقع رؤية أي أصفار على الإطلاق. على سبيل المثال ، إليك “Hello” في Windows-1252:

93 48 65 6C 6C 6F 94

... وفي UTF-16LE:

1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

بصرف النظر عن اقتباسات مجعد ، يقوم كل حرف بتعيين نفس القيمة ، مع إضافة بايت صفر متخلف. في الواقع ، هذا صحيح بالنسبة لكل حرف في مجموعة أحرف ISO-8859-1 (Windows-1252 يمتد ISO-8859-1 لإضافة تعيينات للعديد من أحرف الطباعة-مثل عروض الأسعار المجعد-لاستبدال أحرف التحكم في النطاق 0x80..0x9F).

إذا كنت تعرف أن جميع الملفات هي إما Windows-1252 أو UTF-16LE ، فيجب أن يكون الفحص السريع للأصفار هو كل ما تحتاجه لمعرفة أي ما هو. هناك سبب وجيه لأن شارديت بطيئة ومعقدة للغاية ، لكن في هذه الحالة أعتقد أنه يمكنك الابتعاد بسرعة وقذرة.

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