দ্রষ্টব্য: নিম্নলিখিতগুলি উইন্ডোজ পাওয়ারশেলের ক্ষেত্রে প্রযোজ্য । ক্রস-প্ল্যাটফর্ম পাওয়ারশেল কোর (v6 +) সংস্করণের জন্য পরবর্তী বিভাগটি
দেখুন ।
উপর PSv5.1 বা উচ্চতর , যেখানে >এবং >>কার্যকরভাবে এর alias লেখা হয় Out-File, আপনি পারেন ডিফল্ট এনকোডিং সেট >/ >>/ Out-Fileমাধ্যমে $PSDefaultParameterValuesপক্ষপাত পরিবর্তনশীল :
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
উপর PSv5.0 অথবা নীচের , আপনি করতে পারবেন জন্য এনকোডিং পাল্টাতে >/>> কিন্তু, উপর PSv3 বা উচ্চতর , উপরোক্ত কৌশল করে করতে স্পষ্ট কলের জন্য কাজOut-File ।
( $PSDefaultParameterValuesপছন্দসই পরিবর্তনশীল PSV3.0 এ চালু হয়েছিল)।
উপর PSv3.0 বা উচ্চতর , আপনি করতে চান তাহলে ডিফল্ট এনকোডিং নির্ধারণ সব cmdlets সমর্থন
একটি -Encodingপ্যারামিটার (PSv5.1 + এ যার >এবং >>), ব্যবহার:
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
আপনি যদি এই কমান্ডটি আপনার$PROFILE , সেমিডলেটগুলিতে রাখেন এবং যেমনOut-FileSet-Content ইউটিএফ -8 এনকোডিংটি ডিফল্টরূপে ব্যবহার করেন তবে মনে রাখবেন যে এটি একটি সেশন-গ্লোবাল সেটিংস তৈরি করে যা এমন সমস্ত কমান্ড / স্ক্রিপ্টগুলিকে প্রভাবিত করবে যা কোনও এনকোডিং স্পষ্টভাবে উল্লেখ করে না।
একইভাবে, আপনার স্ক্রিপ্ট বা মডিউলগুলিতে আপনি একইভাবে আচরণ করতে চান এমন কমান্ডগুলি অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন , যাতে অন্য ব্যবহারকারী বা অন্য কোনও মেশিন দ্বারা চালিত হয়েও তারা প্রকৃতপক্ষে একই আচরণ করে।
ক্যাভেট : ** পাওয়ারশেল, v5.1 হিসাবে অবিচ্ছিন্নভাবে ইউটিএফ -8 ফাইল তৈরি করে _ একটি (সিউডো) বিওএম _ ** দিয়ে , যা কেবল উইন্ডোজ বিশ্বে প্রচলিত - ইউনিক্স ভিত্তিক ইউটিলিটিগুলি এই বিওএমটিকে স্বীকৃতি দেয় না (নীচে দেখুন); বিওএম-কম ইউটিএফ -8 ফাইল তৈরি করা এমন কাজের জন্য এই পোস্টটি দেখুন ।
একটি জন্য উইন্ডোজ PowerShell মান cmdlets অনেক জুড়ে দুর্দান্তভাবে অসঙ্গত ডিফল্ট ক্যারেক্টার এনকোডিং আচরণের সারসংক্ষেপ , নীচে অধ্যায় দেখুন।
স্বয়ংক্রিয় $OutputEncodingচলকটি সম্পর্কিত নয় , এবং কেবল পাওয়ারশেল বাহ্যিক প্রোগ্রামগুলির সাথে কীভাবে যোগাযোগ করে ( প্রযোজ্য পাওয়ারশেল তাদের কাছে স্ট্রিং প্রেরণ করার সময় কী কী ব্যবহার করে) এটি প্রয়োগ করে - ফাইলগুলিতে সংরক্ষণের জন্য আউটপুট পুনর্নির্দেশ অপারেটর এবং পাওয়ারশেল সেমিডলেটগুলি ব্যবহার করে এমন এনকোডিংয়ের সাথে এর কোনও সম্পর্ক নেই।
Readingচ্ছিক পঠন: ক্রস প্ল্যাটফর্মের দৃষ্টিভঙ্গি: পাওয়ারশেল কোর :
পাওয়ারশেল এখন তার পাওয়ারশেল কোর সংস্করণের মাধ্যমে ক্রস প্ল্যাটফর্ম , যার এনকোডিং - সংবেদনশীলভাবে - ইউনিক্সের মতো প্ল্যাটফর্মগুলির সাথে সামঞ্জস্য রেখে বিওএম-কম ইউটিএফ -8 এর ডিফল্ট ।
এর অর্থ হ'ল একটি বিওএমবিহীন উত্স-কোড ফাইলগুলি ইউটিএফ -8 হিসাবে ধরে নেওয়া হয় এবং বিওএম-কম ইউটিএফ -8 এ >/ Out-File/ Set-Contentডিফল্ট ব্যবহার করা হয় ; এর স্পষ্ট ব্যবহার যুক্তি খুব সৃষ্টি BOM-কম হল UTF-8, কিন্তু আপনি ফাইল তৈরি করতে নির্বাচন করতে পারেন সঙ্গে সঙ্গে সিউডো-BOM মান।utf8 -Encodingutf8bom
আপনি যদি একটি ইউনিক্স-সদৃশ প্ল্যাটফর্ম এবং আজকাল এমনকি উপর একটি সম্পাদক PowerShell স্ক্রিপ্ট তৈরি করেন উইন্ডোজ যেমন ভিসুয়াল স্টুডিও কোড এবং সর্বোচ্চ পাঠ্য হিসাবে ক্রস-প্ল্যাটফর্ম সম্পাদকদের সাথে, ফলে *.ps1ফাইল সাধারণত হবে না একটি হল UTF-8 সিউডো-BOM আছে:
- পাওয়ারশেল কোরে এটি কাজ করে ।
- এটি উইন্ডোজ পাওয়ারশেলের উপর ভেঙে যেতে পারে , যদি ফাইলটিতে অ-এএসসিআইআই অক্ষর থাকে; আপনার স্ক্রিপ্টগুলিতে আপনার যদি নন-এএসসিআইআই অক্ষর ব্যবহার করার প্রয়োজন হয়, তবে তাদের বিওএম সহ ইউটিএফ -8 হিসাবে সংরক্ষণ করুন ।
বিওএম ব্যতীত উইন্ডোজ পাওয়ারশেল (মিস) আপনার স্ক্রিপ্টটিকে লিগ্যাসিতে "এএনএসআই" কোডপেজ (প্রাক-ইউনিকোড অ্যাপ্লিকেশনগুলির জন্য সিস্টেম লোকাল দ্বারা নির্ধারিত; যেমন, ইউএস-ইংলিশ সিস্টেমে উইন্ডোজ -১২২২) হিসাবে এনকোডড হিসাবে ব্যাখ্যা করেছে।
বিপরীতভাবে, যে ফাইল কি হল UTF-8 সিউডো-BOM উপর সমস্যা হতে পারে আছে ইউনিক্সের মত প্ল্যাটফর্মের, তারা যেমন ইউনিক্স ইউটিলিটি কারণ cat, sedএবং awk- এবং যেমন এমন কিছু সম্পাদকদের gedit- এতে মাধ্যমে সিউডো-BOM পাস , অর্থাত্, এটি ডেটা হিসাবে বিবেচনা ।
- এটি সর্বদা সমস্যা নাও হতে পারে তবে অবশ্যই এটি হতে পারে যেমন আপনি যখন কোনও ফাইলকে স্ট্রিংয়ের
bashসাথে স্ট্রিনে পড়ার , বলুন text=$(cat file)বা বলার চেষ্টা করেন text=$(<file)- ফলস্বর ভেরিয়েবলটিতে প্রথম 3 বাইট হিসাবে সিউডো-বিওএম থাকবে।
উইন্ডোজ পাওয়ারশেলে অসামঞ্জস্যপূর্ণ ডিফল্ট এনকোডিং আচরণ :
আফসোস, উইন্ডোজ পাওয়ারশেলে ব্যবহৃত ডিফল্ট চরিত্রের এনকোডিংটি অত্যন্ত বেমানান; পূর্ববর্তী বিভাগে আলোচিত ক্রস-প্ল্যাটফর্ম পাওয়ারশেল কোর সংস্করণ প্রশংসনীয়ভাবে এটিকে দিয়েছিল এবং শেষ করেছে।
বিঃদ্রঃ:
নিম্নলিখিতটি সমস্ত স্ট্যান্ডার্ড সেমিলেটলেটগুলি কভার করার আকাঙ্ক্ষা করে না ।
গুগলিংয়ের সেমিডলেট নামগুলি তাদের সহায়তার বিষয়গুলি সন্ধানের জন্য এখন আপনাকে ডিফল্টরূপে বিষয়গুলির পাওয়ারশেল কোর সংস্করণ দেখায় ; উইন্ডোজ পাওয়ারশেল সংস্করণে স্যুইচ করতে বামদিকে বিষয়গুলির তালিকার উপরে সংস্করণ ড্রপ-ডাউন তালিকাটি ব্যবহার করুন ।
এই লেখাটি হিসাবে, ডকুমেন্টেশনগুলি প্রায়শই ভুলভাবে দাবি করে যে উইন্ডোজ পাওয়ারশেলের মধ্যে ASCII হ'ল ডিফল্ট এনকোডিং - এই গিটহাব ডকস ইস্যুটি দেখুন ।
Cmdlet যে লিখেছে :
Out-Fileএবং >/ >>"ইউনিকোড" তৈরি করুন - ইউটিএফ-16 এলই - ফাইলগুলি ডিফল্টরূপে - যেখানে প্রতিটি এএসসিআইআই-রেঞ্জের অক্ষর (খুব) 2 বাইট দ্বারা উপস্থাপিত হয় - যা উল্লেখযোগ্যভাবে Set-Content/ Add-Content(পরবর্তী পয়েন্ট দেখুন) থেকে পৃথক ; New-ModuleManifestএবং Export-CliXmlUTF-16LE ফাইল তৈরি করুন।
Set-Content(এবং Add-Contentযদি ফাইলটি এখনও বিদ্যমান না / খালি থাকে) এএনএসআই এনকোডিং ব্যবহার করে (সক্রিয় সিস্টেম লোকেলের এএনএসআই লেগ্যাসি কোড পৃষ্ঠা, যা পাওয়ারশেল কল করে সুনির্দিষ্ট এনকোডিং) ব্যবহার করে Default।
Export-Csvপ্রকৃতপক্ষে ডকুমেন্ট হিসাবে ASCII ফাইল তৈরি করে তবে -Appendনীচের নোটগুলি আবার দেখুন।
Export-PSSession ডিফল্টরূপে বিওএম-এর সাথে ইউটিএফ -8 ফাইল তৈরি করে।
New-Item -Type File -Value বর্তমানে বিওএম-কম (!) ইউটিএফ -8 তৈরি করে।
Send-MailMessageসাহায্যের প্রসঙ্গটি দাবী করেন যে হওয়া ASCII এনকোডিং ডিফল্ট - আমি ব্যক্তিগতভাবে যে দাবি যাচাই করেন নি।
Start-Transcript অবিচ্ছিন্নভাবে বিওএম দিয়ে ইউটিএফ -8 ফাইল তৈরি করে তবে -Appendনীচের নোটগুলি আবার দেখুন।
বিদ্যমান ফাইলগুলিতে সংযোজনকারী আদেশগুলি পুনরায় :
>>/ Out-File -Appendকরা কোন একটি ফাইল এর এনকোডিং মেলে প্রয়াস বিদ্যমান সামগ্রী । এটি হ'ল তারা অন্ধভাবে তাদের ডিফল্ট এনকোডিংটি প্রয়োগ করে, যদি না অন্যভাবে নির্দেশিত হয় তবে -Encodingযা >>(PSV5.1 + এ অপ্রত্যক্ষভাবে বাদে $PSDefaultParameterValuesউপরের মতো প্রদর্শিত হবে) এর বিকল্প নয়। সংক্ষেপে: আপনাকে অবশ্যই বিদ্যমান ফাইলের সামগ্রীর এনকোডিংটি জানতে হবে এবং সেই একই এনকোডিংটি ব্যবহার করে সংযোজন করতে হবে।
Add-Contentপ্রশংসনীয় ব্যতিক্রম: সুস্পষ্ট -Encodingযুক্তির অভাবে , এটি বিদ্যমান এনকোডিং সনাক্ত করে এবং স্বয়ংক্রিয়ভাবে এটিকে নতুন সামগ্রীতে প্রয়োগ করে। ধন্যবাদ, js2010 । নোট করুন যে উইন্ডোজ পাওয়ারশেলের মধ্যে এর অর্থ এটি বিদ্যমান একটি সামগ্রীর মধ্যে বিওএম না থাকলে এটিএনএসআই এনকোডিং হয়, তবে পাওয়ারশেল কোরে এটি ইউটিএফ -8 রয়েছে।
Out-File -Append/ >>এবং এর মধ্যে এই অসঙ্গতি Add-Content, যা পাওয়ারশেল কোরকেও প্রভাবিত করে , এই গিটহাব ইস্যুতে আলোচনা করা হয়েছে ।
Export-Csv -Append আংশিকভাবে বিদ্যমান এনকোডিং মেলে: এটি অন্ধভাবে appends হল UTF-8 যদি বিদ্যমান ফাইল এনকোডিং হওয়া ASCII / হল UTF-8 / ANSI কোন, কিন্তু সঠিকভাবে ম্যাচ হল UTF-16LE এবং হল UTF-16BE।
এটিকে অন্যভাবে বলার জন্য: কোনও বিওএমের অনুপস্থিতিতে, Export-Csv -Appendইউটিএফ -8 হ'ল, যেখানে Add-Contentএএনএসআই ধরে নেওয়া হয়েছে।
Start-Transcript -Append আংশিকভাবে বিদ্যমান এনকোডিংয়ের সাথে মেলে: এটি সঠিকভাবে বিওএম-এর সাথে এনকোডিংয়ের সাথে মেলে তবে একটির অভাবে সম্ভাব্য ক্ষতিকারক এএসসিআইআই এনকোডিংয়ের ডিফল্ট।
Cmdlets যে পড়া (যে হয় জন্য যে এনকোডিং ব্যবহার একটি BOM অভাবে ):
Get-Contentএবং Import-PowerShellDataFileএএনএসআইতে ডিফল্ট ( Default) যা সামঞ্জস্যপূর্ণ Set-Content।
এএনএসআই হ'ল পাওয়ারশেল ইঞ্জিন যখন ডিফল্ট হয় তখন ফাইল থেকে উত্স কোডটি পড়ে ।
বিপরীতে Import-Csv, Import-CliXmlএবং Select-Stringহল UTF-8 একটি BOM অনুপস্থিতিতে অনুমান।
>/>>জন্য কার্যকর alias লেখা হয়ে ওঠেOut-File5.1 মধ্যে?