দ্রষ্টব্য: নিম্নলিখিতগুলি উইন্ডোজ পাওয়ারশেলের ক্ষেত্রে প্রযোজ্য । ক্রস-প্ল্যাটফর্ম পাওয়ারশেল কোর (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-File
Set-Content
ইউটিএফ -8 এনকোডিংটি ডিফল্টরূপে ব্যবহার করেন তবে মনে রাখবেন যে এটি একটি সেশন-গ্লোবাল সেটিংস তৈরি করে যা এমন সমস্ত কমান্ড / স্ক্রিপ্টগুলিকে প্রভাবিত করবে যা কোনও এনকোডিং স্পষ্টভাবে উল্লেখ করে না।
একইভাবে, আপনার স্ক্রিপ্ট বা মডিউলগুলিতে আপনি একইভাবে আচরণ করতে চান এমন কমান্ডগুলি অন্তর্ভুক্ত করার বিষয়ে নিশ্চিত হন , যাতে অন্য ব্যবহারকারী বা অন্য কোনও মেশিন দ্বারা চালিত হয়েও তারা প্রকৃতপক্ষে একই আচরণ করে।
ক্যাভেট : ** পাওয়ারশেল, v5.1 হিসাবে অবিচ্ছিন্নভাবে ইউটিএফ -8 ফাইল তৈরি করে _ একটি (সিউডো) বিওএম _ ** দিয়ে , যা কেবল উইন্ডোজ বিশ্বে প্রচলিত - ইউনিক্স ভিত্তিক ইউটিলিটিগুলি এই বিওএমটিকে স্বীকৃতি দেয় না (নীচে দেখুন); বিওএম-কম ইউটিএফ -8 ফাইল তৈরি করা এমন কাজের জন্য এই পোস্টটি দেখুন ।
একটি জন্য উইন্ডোজ PowerShell মান cmdlets অনেক জুড়ে দুর্দান্তভাবে অসঙ্গত ডিফল্ট ক্যারেক্টার এনকোডিং আচরণের সারসংক্ষেপ , নীচে অধ্যায় দেখুন।
স্বয়ংক্রিয় $OutputEncoding
চলকটি সম্পর্কিত নয় , এবং কেবল পাওয়ারশেল বাহ্যিক প্রোগ্রামগুলির সাথে কীভাবে যোগাযোগ করে ( প্রযোজ্য পাওয়ারশেল তাদের কাছে স্ট্রিং প্রেরণ করার সময় কী কী ব্যবহার করে) এটি প্রয়োগ করে - ফাইলগুলিতে সংরক্ষণের জন্য আউটপুট পুনর্নির্দেশ অপারেটর এবং পাওয়ারশেল সেমিডলেটগুলি ব্যবহার করে এমন এনকোডিংয়ের সাথে এর কোনও সম্পর্ক নেই।
Readingচ্ছিক পঠন: ক্রস প্ল্যাটফর্মের দৃষ্টিভঙ্গি: পাওয়ারশেল কোর :
পাওয়ারশেল এখন তার পাওয়ারশেল কোর সংস্করণের মাধ্যমে ক্রস প্ল্যাটফর্ম , যার এনকোডিং - সংবেদনশীলভাবে - ইউনিক্সের মতো প্ল্যাটফর্মগুলির সাথে সামঞ্জস্য রেখে বিওএম-কম ইউটিএফ -8 এর ডিফল্ট ।
এর অর্থ হ'ল একটি বিওএমবিহীন উত্স-কোড ফাইলগুলি ইউটিএফ -8 হিসাবে ধরে নেওয়া হয় এবং বিওএম-কম ইউটিএফ -8 এ >
/ Out-File
/ Set-Content
ডিফল্ট ব্যবহার করা হয় ; এর স্পষ্ট ব্যবহার যুক্তি খুব সৃষ্টি BOM-কম হল UTF-8, কিন্তু আপনি ফাইল তৈরি করতে নির্বাচন করতে পারেন সঙ্গে সঙ্গে সিউডো-BOM মান।utf8
-Encoding
utf8bom
আপনি যদি একটি ইউনিক্স-সদৃশ প্ল্যাটফর্ম এবং আজকাল এমনকি উপর একটি সম্পাদক 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-CliXml
UTF-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-File
5.1 মধ্যে?