English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

طريقة تعيين تنسيق النص في ملف Python

إذا كنت تريد كتابة نص صيني في ملف py الخاص بـ python2، فيجب أن تضيف سطرًا لتعريف ترميز ملف التفسير، وإلا سيستخدم python2 ترميز ASCII بشكل افتراضي (لم يعد هذا المشكلة موجودة في python3، حيث يكون ترميز ملف التفسير افتراضيًا UTF-8)

يجب وضع تعليق الترميز في السطر الأول أو الثاني، عادةً يجب أن تكون النصوص الأولى لملف python كالتالي:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

السطر الأول هو تحديد معلّق التفسير الخاص بـ python، والسطر الثاني هو تحديد طريقة ترميز ملف python، هناك طرق متاحة للتعيين طريقة الترميز

1. طريقة الإعداد مع العلامة المتساوية:

#!/usr/bin/python
# coding=<encoding name>

2. الأكثر شيوعًا، مع العلامة الثلاثية (يمكن معرفتها بشكل صحيح من قبل معظم محررات النصوص):

#!/usr/bin/python
# -*- coding: <encoding name> -*-

3. فيم:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

اعلام کدگذاری سربرگ دارای چندین کاربرد دارد:

اگر در کد کامنت‌های چینی وجود داشته باشد، نیاز به این اعلان است

ویرایشگرهای پیشرفته‌تر (مثلاً emacs من)، بر اساس سربرگ اعلان، آن را به عنوان فرمت فایل کد در نظر می‌گیرند.

برنامه از طریق سربرگ اعلان، کدگذاری اولیه u”زندگی کوتاه است”، این شیء unicode را تجزیه‌وتحلیل می‌کند، (بنابراین سربرگ اعلان و فرمت ذخیره‌سازی کد باید با یکدیگر سازگار باشند)

تنظیم فرمت کدگذاری پیش‌فرض

import sys  # بارگذاری sys به درون، نه بارگذاری اولیه sys 
reload(sys) # بارگذاری مجدد sys 
sys.setdefaultencoding('utf8') ## فراخوانی تابع setdefaultencoding

در اینجا توجه به خط دوم reload(sys) بسیار مهم است، که نباید از قلم افتد، اگر آن را از قلم بیندازیم، کد به درستی اجرا نخواهد شد. پس چرا باید آن را دوباره بارگذاری کنیم؟ آیا نمی‌توانیم آن را مستقیماً به عنوان یک تابع استفاده کنیم؟ زیرا تابع setdefaultencoding پس از استفاده توسط سیستم حذف می‌شود، بنابراین وقتی از طریق import به آن دسترسی پیدا می‌کنیم، در واقع وجود ندارد، بنابراین باید یک بار sys را بارگذاری کنیم، تا setdefaultencoding قابل استفاده باشد و بتوانیم در کد حالت کدگذاری فعلی解释گر را تغییر دهیم.

در پوشه Lib در مسیر نصب python، یک فایل به نام site.py وجود دارد، که در آن می‌توان main() –> setencoding() –> sys.setdefaultencoding(encoding) را پیدا کرد، زیرا این site.py در هر بار راه‌اندازی python به صورت خودکار بارگذاری می‌شود، بنابراین هر بار که main() اجرا می‌شود، setdefaultencoding() اجرا خواهد شد و به همین دلیل این تابع پس از اجرا حذف می‌شود.

در مورد sys.defaultencoding، این در مواقعی که روش تجزیه‌وتحلیل به صورت واضح مشخص نشده استفاده می‌شود. به عنوان مثال من کدی مانند زیر دارم:

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' # توجه داشته باشید که اینجا str نوع str است، نه unicode 
s.encode('gb18030') 

این کد s را به فرمت gb18030 مجدداً کدگذاری می‌کند، یعنی تبدیل unicode -> str انجام می‌دهد. زیرا s خود به نوع str است، بنابراین

Python یعنی خودکاراً ابتدا s را به unicode تبدیل می‌کند و سپس آن را به gb18030 کدگذاری می‌کند. زیرا تجزیه‌وتحلیل به صورت خودکار توسط python انجام می‌شود و ما روش تجزیه‌وتحلیل را مشخص نکرده‌ایم، python از روش مشخص شده توسط sys.defaultencoding برای تجزیه‌وتحلیل استفاده خواهد کرد. در بسیاری از موارد sys.defaultencoding است

ASCII، إذا لم يكن s من هذا النوع، فإنه سيكون هناك خطأ. لنأخذ الحالة السابقة، sys.defaultencoding الخاص بي هو ASCII، بينما هو تشفير s هو utf8، لذا حدث الخطأ:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 
0: ordinal not in range(128) 

للحالة هذا، هناك طريقتان يمكننا من خلالهما تصحيح الخطأ:

الطريقة الأولى هي إعطاء توجيه واضح حول طريقة تشفير s

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' 
s.decode('utf-8').encode('gb18030') 

الطريقة الثانية هي تغيير sys.defaultencoding إلى طريقة تشفير الملف

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
import sys 
reload(sys) # Python2.5 بعد التشغيل سيتم حذف sys.setdefaultencoding هذا الطريقة، نحتاج إلى إعادة تحميلها 
sys.setdefaultencoding('utf-8') 
str = '中文' 
str.encode('gb18030')

هذا هو كل محتوى مشاركته معكم حول طريقة إعداد تنسيق ملف Python، آمل أن يكون هذا مرجعًا لكم، وأتمنى أن تدعموا دائمًا تعليمات النفخ.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، ملكية المادة لصاحب الحقوق، تم جمع المادة من قبل المستخدمين عبر الإنترنت وتحميلها بشكل مستقل، لا يمتلك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا كنت قد وجدت محتوى يشتبه في حقوق النسخ، فنرجو منك إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' بـ '@') للإبلاغ، وقدم الدليل على هذا الأمر، إذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم بشكل فوري.

مفضل لك