পাইথন উত্স কোড এনকোডিং সংজ্ঞায়নের সঠিক উপায়


163

পিইপি 263 সংজ্ঞা দেয় কীভাবে পাইথন উত্স কোড এনকোডিং ঘোষণা করতে হয়।

সাধারণত, পাইথন ফাইলের প্রথম 2 টি লাইন দিয়ে শুরু করা উচিত:

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

তবে আমি প্রচুর ফাইলগুলি শুরু করে দেখেছি:

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

=> কোডিংয়ের পরিবর্তে এনকোডিং

সুতরাং ফাইল এনকোডিং ঘোষণার সঠিক উপায় কি?

হয় এনকোডিং অনুমতি কারণ ব্যবহৃত Regex অলস? অথবা এটি ফাইলের এনকোডিং ঘোষণার কেবল অন্য রূপ?

আমি এই প্রশ্নটি জিজ্ঞাসা করছি কারণ পিইপি এনকোডিংয়ের বিষয়ে কথা বলে না , এটি কেবল কোডিংয়ের কথা বলে ।


4
যাইহোক, আরও নমনীয়তা এবং বহনযোগ্যতার জন্য এটি #!/usr/bin/env pythonপরিবর্তে ব্যবহার করার পরামর্শ দেওয়া হয়#!/usr/bin/python
glarrain

7
ইউটিএফ 8 বলার জন্য এই পৃষ্ঠার উত্তরগুলির মধ্যে যেগুলির একটিওরও সহজ, কার্যকারী উদাহরণ নেই সেভাবে আমি পছন্দ করি। স্ট্যাকওভারলি এর সেরা।
aaa90210

2
আমি কেবল যুক্ত করতে চেয়েছিলাম পাইথন 3 ডিফল্ট এনকোডিং থেকে পরিবর্তিত asciiহয়েছে UTF-8। তুলনা করুন: পাইথন ৩.7 ডক্সের সাথে পাইথন ২.7 ডক্স । এর অর্থ যদি আপনি নির্দিষ্ট করতে চান তবে আপনি নিরাপদে এই এনকোডিংটি বাদ দিতে পারেন UTF-8
gertvdijk

উত্তর:


161

এখানে ডক্স পরীক্ষা করুন :

"পাইথন স্ক্রিপ্টের প্রথম বা দ্বিতীয় লাইনে কোনও মন্তব্য যদি নিয়মিত অভিব্যক্তির সাথে মিলে যায় তবে coding[=:]\s*([-\w.]+)এই মন্তব্যটি এনকোডিং ঘোষণার হিসাবে প্রক্রিয়া করা হবে"

"এই অভিব্যক্তির প্রস্তাবিত ফর্মগুলি হ'ল

# -*- coding: <encoding-name> -*-

যা জিএনইউ ইমাক্স দ্বারাও স্বীকৃত এবং

# vim:fileencoding=<encoding-name>

যা ব্রাম মুলেনার ভিআইএম দ্বারা স্বীকৃত। "

সুতরাং, আপনি "কোডিং" অংশের আগে বেশ কিছু রাখতে পারেন তবে আপনি যদি 100% পাইথন-ডক্স-সুপারিশ-সামঞ্জস্যপূর্ণ হতে চান তবে "কোডিং" (কোনও উপসর্গ ছাড়াই) আটকে থাকুন।

আরও সুনির্দিষ্টভাবে, পাইথন এবং আপনি যে নির্দিষ্ট সম্পাদনা সফটওয়্যার দ্বারা স্বীকৃত তা ব্যবহার করতে হবে (যদি এটি কিছুতেই প্রয়োজন / গ্রহণ করে তবে)। উদাহরণস্বরূপ codingফর্মটি জিএনইউ ইমাক্স দ্বারা স্বীকৃত (বাক্সের বাইরে) কিন্তু ভিমকে নয় (হ্যাঁ, সর্বজনীন চুক্তি ব্যতীত এটি মূলত টারফ ওয়ার )।



10
-*-নিশ্চিত করে যে লাইন গনুহ গিয়ে Emacs (কিছু প্রোগ্রামারদের সঙ্গে জনপ্রিয় একটি টেক্সট এডিটর) দ্বারা স্বীকৃত। মনে রাখবেন যে, এই উত্তরের বিপরীতে, ইমাস ফর্ম এবং ভিম ফর্ম উভয়ই 100% পাইথন-ডক্স-সুপারিশ-সামঞ্জস্যপূর্ণ (তারা উভয়ই দীর্ঘমেয়াদী কনভেনশন দ্বারা "রেজিএক্সপ -" ম্যাচ "এর সাথে মিলে যায়, যার অর্থ" কোথাও কোথাও মিল স্ট্রিং ", পাইথনের API এর বিপরীতে)।
মার্টিনজস

1
এম্বেড থাকা নির্দেশের নির্দিষ্ট ইম্যাক্স প্রয়োজনীয়তাগুলি gnu.org/software/emacs/manual/html_node/emacs/… নথিভুক্ত করা হয়েছে । সংক্ষিপ্ত ইন, ফাইলের শুরুর জন্য বিন্যাস হল: <prefix>-*- var: value[; ...] -*-
ivan_pozdeev

38

পিইপি 263:

প্রথম বা দ্বিতীয় লাইনটি অবশ্যই "কোডিং [: =] \ s * ([-] ডাব্লু।]] +)" র নিয়মিত ভাবের সাথে মেলে

সুতরাং, "এন কোডিং: ইউটিএফ -8 " ম্যাচগুলি।

পিইপি কয়েকটি উদাহরণ সরবরাহ করে:

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

 

# This Python file uses the following encoding: utf-8
import os, sys

31

আপনার প্রোগ্রামের শীর্ষে কেবল নীচের স্টেটমেন্টের অনুলিপি করুন character এটি চরিত্রের এনকোডিং সমস্যার সমাধান করবে

#!/usr/bin/env python
# -*- coding: utf-8 -*-

3

আজকের হিসাবে - জুন 2018


পিইপি 263 নিজেই নীচে বর্ণিত রেগেক্সের উল্লেখ করেছে:

উত্স কোড এনকোডিং সংজ্ঞায়িত করার জন্য, একটি যাদু মন্তব্য অবশ্যই উত্স ফাইলগুলিতে ফাইলের প্রথম বা দ্বিতীয় লাইন হিসাবে স্থাপন করা উচিত, যেমন:

# coding=<encoding name>

বা (জনপ্রিয় সম্পাদক দ্বারা স্বীকৃত ফর্ম্যাটগুলি ব্যবহার করে):

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

বা:

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

আরও স্পষ্টভাবে, প্রথম বা দ্বিতীয় লাইনটি অবশ্যই নিম্নলিখিত নিয়মিত অভিব্যক্তির সাথে মেলে:

^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)

সুতরাং, ইতিমধ্যে অন্যান্য উত্তরের সংক্ষিপ্তসার হিসাবে, এটি codingকোনও উপসর্গের সাথে মিলবে তবে আপনি যদি পিইপি-কমপ্লায়েন্ট হিসাবে এটি পেতে চান তবে (যদিও আমি যতদূর বলতে পারি, encodingপরিবর্তে ব্যবহার করা codingলঙ্ঘন করে না পিইপি 263 কোনও উপায়ে) - codingকোনও উপসর্গ ছাড়াই 'প্লেইন' দিয়ে আঁকুন।


1

যদি আমি ভুল না হয়ে থাকি তবে উত্স ফাইল এনকোডিংয়ের মূল প্রস্তাবনাটি ছিল প্রথম দু'পক্ষের লাইনের জন্য একটি নিয়মিত অভিব্যক্তি ব্যবহার করা, যা উভয়কেই অনুমতি দেয়।

আমি মনে করি রেজেক্স কিছু coding:অনুসরণ করার ধারে কিছু ছিল।

আমি এটি খুঁজে পেয়েছি: http://www.python.org/dev/peps/pep-0263/ এটাই মূল প্রস্তাব, তবে তারা ঠিক কী করেছিল তা বলে আমি চূড়ান্ত অনুমান খুঁজে পাচ্ছি না।

আমি অবশ্যই encoding:দুর্দান্ত প্রভাব ব্যবহার করেছি , সুতরাং স্পষ্টতই এটি কার্যকর হয়।

সম্পূর্ণ ভিন্ন কিছুতে পরিবর্তন করার চেষ্টা করুন, duhcoding: ...এটি ঠিক পাশাপাশি কাজ করে কিনা তাও দেখতে পছন্দ করুন ।


0

আমি সন্দেহ করি এটি রুবির সাথে অনুরূপ - উভয় পদ্ধতিই ঠিক আছে।

এটি মূলত কারণ বিভিন্ন পাঠ্য সম্পাদকরা এনকোডিং চিহ্নিতকরণের বিভিন্ন পদ্ধতি (যেমন, এই দুটি) ব্যবহার করে।

রুবির সাথে, যতক্ষণ না প্রথম বা দ্বিতীয়টি শেবাং লাইনে একটি স্ট্রিং রয়েছে যা মেলে:

coding: encoding-name

এবং এই লাইনে কোনও সাদা স্থান এবং অন্যান্য ফ্লাফ উপেক্ষা করুন ignoring (এটি প্রায়শই a এর পরিবর্তেও হতে পারে: খুব বেশি)।

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