اذهب إلى المحتوى

السؤال

نشر

عندما أقوم بقراءة ملف نصي باستخدام بايثون، لا يمكنني معرفة الترميز المستخدم في كتابة الملف وبالتالي قد تظهر رموز غريبة عند عرض النص المستخرج من الملف، هل توجد طريقة لتحديد ترميز ملف معين عند قراءته؟

ونفس الأمر بالنسبة لسحب البيانات من صفحات HTML بإستخدام مكتبة Beautiful Soup حيث أقوم بإستعمال ترميز utf-8 لكن في بعض الأحيان تظهر رموز غريبة بسبب إستعمال الصفحة لترميز مختلف.

كيف أقوم بمعرفة ترميز صفحات الويب HTML؟

Recommended Posts

  • 1
نشر

يمكن استخدام المكتبة: chardet التي تسمح لنا بمعرفة ماهو نمط الترميز الذي كتب فيه ملف ما.

التثبيت:

pip install chardet

الاستخدام:

# تضمين المكتبة
import chardet 

# قراءة البيانات الخام بدون تحديد ترميز
rawdata = open(file, "r").read()

# معرفة الترميز من خلال استخدام المكتبة و الدالة detect
result = chardet.detect(rawdata)

# تخزين التركميز في متغير لاستخدامه لاحقا
charenc = result['encoding']

ثم نقوم بتمرير نوع الترميز كوسيط لدالة قراءة الملف open:

myfile = open('results.txt', 'r', encoding=charenc)
                                  ^^^^^^^^^^^^^^^^

بالعلم تدعم هذه المكتيبة العديد من أنواع الترميز:

ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants)
Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese)
EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese)
EUC-KR, ISO-2022-KR (Korean)
KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
ISO-8859-2, windows-1250 (Hungarian)
ISO-8859-5, windows-1251 (Bulgarian)
windows-1252 (English)
ISO-8859-7, windows-1253 (Greek)
ISO-8859-8, windows-1255 (Visual and Logical Hebrew)
TIS-620 (Thai)

 

  • 0
نشر

يمكنك تثبيت مكتبة cchardet السريعة في تحديد الترميز ، يمكنك تثبيتها

pip install cchardet

وإستخدامها كالآتي

"""قراءة الملفات النصية الغير معروف ترميزها"""

from pathlib import Path
import sys

import cchardet as chardet


def read_confidently(filename):
    """Detect encoding and return decoded text, encoding, and confidence level."""
    """كشف الترميز وإرجاع النص والترميز"""
    filepath = Path(filename)

    # يجب علينا قراءة الملف بشكل ثنائي لأننا لانعرف ترميزه بعد
    blob = filepath.read_bytes()

    detection = chardet.detect(blob)
    encoding = detection["encoding"]
    confidence = detection["confidence"]
    text = blob.decode(encoding)

    return text, encoding, confidence


def main():
    """Command runner."""
    filename = sys.argv[1]  # نفترض أن المُدخل الأول هو اسم الملف
    text, encoding, confidence = read_confidently(filename)
    print(text)
    print(f"Encoding was detected as {encoding}.")
    if confidence < 0.6:
        print(f"Warning: confidence was only {confidence}!")
        print("Please double-check output for accuracy.")


if __name__ == "__main__":
    main()

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...