PowerShell における UTF-8 エンコーディング(CHCP 65001)
- PowerShell における Unicode
- Windows PowerShell で UTF-8 エンコーディングを使用するためのシステムロケールの変更
- 
          
            Windows PowerShell で UTF-8 エンコーディングを使用するために $PSDefaultParameterValues変数でエンコーディングを設定する
- 
          
            Windows PowerShell で UTF-8 エンコーディングに切り替えるための chcpコマンドの使用
- PowerShell で UTF-8 エンコーディングを使用するメリット
- 結論
 
UTF-8 エンコーディングは、PowerShell では CHCP 65001 として表現され、多言語および特殊文字をコンソールで扱うための重要なツールです。本記事では、UTF-8 エンコーディングの重要性から実際の実装まで、PowerShell での利用方法について包括的なガイドを提供します。
PowerShell における Unicode
Unicode は、全世界で使用される文字エンコーディングの標準です。テキストファイル、ウェブページ、およびその他の文書において、文字がどのように表現されるかを定義しています。
コンピュータシステムは、文字や文字列を操作するために Unicode を使用します。PowerShell のデフォルトエンコーディングは Windows-1252 です。
Unicode は、世界中のすべての言語の文字をサポートするために開発されました。PowerShell はデフォルトで Unicode 文字エンコーディングをサポートしています。
UTF-8 と UTF-16 は、最も一般的な Unicode エンコーディングです。PowerShell は、UTF7 を除くすべての Unicode エンコーディングで常に BOM を使用します。
BOM(バイトオーダーマーク)は、ファイルやテキストストリームの最初の数バイトに含まれる Unicode 署名で、Unicode エンコーディングを示します。
UTF-8 エンコーディングの理解
UTF-8 は、テキストを表現するために可変幅エンコーディングを使用する文字エンコーディング標準です。ほぼすべての Unicode 文字をエンコードできるため、インターネット上で最も広く使用されている文字エンコーディングです。
PowerShell のコンテキストにおいて、UTF-8 エンコーディングは、異なる言語、記号、および特殊文字がコンソールウィンドウに正しく表示され、処理されることを保証します。
Windows PowerShell で UTF-8 エンコーディングを使用するためのシステムロケールの変更
Windows では、システムロケール(非 Unicode プログラムの現在の言語)を変更するオプションがあります。ただし、この機能はまだベータ版です。
コントロールパネル の 地域の設定 に移動するか、ファイル名を指定して実行 プログラムから intl.cpl を開きます (Windows+R)。

管理 タブを開き、システムロケールの変更 をクリックします。次に、下の画像のように ベータ オプションにチェックを入れます。

その後、OK を押してコンピュータを再起動し、設定を適用します。
コンピュータを再起動後、$OutputEncoding 変数を確認して現在のエンコーディングを表示できます。
$OutputEncoding
出力:
ご覧のとおり、現在のエンコーディングは Unicode (UTF-8) です。
BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001
これで、PowerShell で他の言語の文字を表示できるようになります。
Get-Content test.txt
出力:
만나서 반가워요
Windows PowerShell で UTF-8 エンコーディングを使用するために $PSDefaultParameterValues 変数でエンコーディングを設定する
$PSDefaultParameterValues は、PowerShell において Cmdlet パラメータのデフォルト値を設定できる組み込みの自動変数です。これにより、Cmdlet を使用するたびに明示的に提供することなく、Cmdlet のパラメータにデフォルト値を指定できます。
次のコマンドを実行して、PowerShell で UTF-8 エンコーディングを有効にすることができます。
$PSDefaultParameterValues = @{'*:Encoding' = 'utf8' }
これは、現在の PowerShell コンソールにのみ有効です。PowerShell ウィンドウを終了するとデフォルトにリセットされます。
Get-Content test.txt
出力:
만나서 반가워요
PowerShell のいくつかの Cmdlet には、異なる文字セットのエンコーディングを指定するための -Encoding パラメータがあります。これらの中には、Add-Content、Set-Content、Get-Content、Export-Csv、Out-File などがあります。
-Encoding パラメータは、以下の値をサポートしています:ascii、bigendianunicode、oem、unicode、utf7、utf8、utf8BOM、utf8NoBOM、utf32。
Windows PowerShell で UTF-8 エンコーディングに切り替えるための chcp コマンドの使用
PowerShell で UTF-8 エンコーディングに切り替えるには、chcp コマンドの後に 65001 を使用します:
chcp 65001
このコマンドは、PowerShell に文字入力と出力に UTF-8 エンコーディングを使用するよう指示します。
このコマンドの詳細は以下のとおりです:
- 
chcp:これは、Windows コマンドプロンプトおよび PowerShell におけるコマンドです。“Code Page の変更” を意味します。コードページは、コンソールウィンドウで文字がどのようにエンコードおよび表示されるかを決定します。
- 
65001:この文脈では、65001は UTF-8 エンコーディングのコードページを表します。UTF-8 は、Unicode のすべての可能な文字やコードポイントをエンコードできる可変幅の文字エンコーディングです。- UTF-8:これは、ほぼすべての人間の言語のすべての文字を表現できる広く使用されている文字エンコーディングです。特にインターネット上で普及しています。
 
- 
UTF-8( 65001)への切り替え:chcp 65001を実行すると、PowerShell にコンソールでの文字入力と出力に UTF-8 エンコーディングを使用するよう指示します。これは、異なる言語や記号を含むテキストデータを扱う際に便利です。
たとえば、英語以外の文字を含むファイルやデータを扱っている場合、コードページを UTF-8 に設定すると、これらの文字がコンソールに正しく表示されることが保証されます。
デフォルトコードページへのリセット
コードページを変更すると、いくつかのコンソールアプリケーションの動作に影響を与えることがあるため、UTF-8 の使用が終了したらデフォルトのコードページ(通常は英語用の 437)にリセットすることは一般的に良い慣行です。
デフォルトにコードページをリセットするには、次のコマンドを使用できます:
chcp 437
これにより、システムのデフォルトのコードページに戻り、英語のテキストに適した状態になります。
PowerShell で UTF-8 エンコーディングを使用するメリット
- 多言語サポート:UTF-8 により、PowerShell は複数の言語のテキストを扱い、異なるスクリプトからの文字の正しい表示と処理を保証します。
- 特殊文字:標準のエンコーディングでは表現されない絵文字や数学記号のような特殊文字を扱う際に重要です。
- ファイル処理:さまざまな言語の文字を含むテキストファイルに対して作業を行う際、UTF-8 を使用することで正確なファイル操作が保証されます。
- データ処理:英語以外の文字を含むデータを扱う場合、コードページを UTF-8 に設定することで正確な処理が保証されます。
潜在的な考慮事項
- コンソールアプリケーション:コードページを変更すると、いくつかのコンソールアプリケーションの動作に影響を与えることがあります。UTF-8 の使用が終了したら、必ずデフォルトのコードページ(英語用の chcp 437)にリセットしてください。
- 互換性:PowerShell で実行しているプログラムやスクリプトが UTF-8 エンコーディングを処理できるか確認してください。古いアプリケーションは完全にサポートされていない場合があります。
実用的な使用例
- ファイルの読み取り:非英語の文字を含むテキストファイルを読み取る際、UTF-8 を使用することで正確な表現が保証されます。
- ウェブスクレイピング:さまざまな言語の文字を含む可能性があるウェブサイトからテキストを抽出する場合、UTF-8 は正しい解釈を保証します。
- スクリプトの出力:スクリプトが非英語の文字を含む出力を生成する場合、UTF-8 を使用することで正しく表示されます。
- インタラクティブな PowerShell セッション:特殊文字を含むテキストを入力または出力する必要があるインタラクティブなセッションでは、UTF-8 エンコーディングが非常に重要です。
結論
PowerShell における UTF-8 エンコーディング(CHCP 65001)は、コンソールで多言語および特殊文字を処理するための強力なツールです。さまざまな言語やスクリプトからのテキストの正確な表現と処理を可能にします。UTF-8 エンコーディングの使用方法やタイミングを理解することで、さまざまな文字セットを扱う際のシームレスな体験が確保されます。
プログラムやスクリプトが UTF-8 に互換性があるかどうかを考慮し、必要に応じて必ずデフォルトのコードページに戻すことを忘れないでください。UTF-8 エンコーディングの力を活用することで、PowerShell でさまざまなテキストデータを自信を持って正確に処理する準備が整います。
