ja-JP/about_Character_Encoding.help.txt
|
TOPIC about_Character_Encoding 簡単な説明 PowerShell が文字列データの入出力に文字エンコードをどのように使用する かを説明します。 詳細な説明 Unicode は世界規模の文字エンコード標準です。システムは文字と文字列の 操作に Unicode のみを使用します。Unicode のすべての側面に関する詳しい 説明については、The Unicode Standard を参照してください。 Windows は Unicode と従来の文字セットをサポートします。Windows コード ページなどの従来の文字セットは、8 ビット値または 8 ビット値の組み合わせを 使用して、特定の言語または地域設定で使用される文字を表します。 PowerShell は既定で Unicode 文字セットを使用します。ただし、いくつかの コマンドレットには Encoding パラメーターがあり、異なる文字セットの エンコードを指定できます。このパラメーターを使用すると、他のシステムや アプリケーションとの相互運用に必要な特定の文字エンコードを選択できます。 次のコマンドレットには Encoding パラメーターがあります。 - Microsoft.PowerShell.Management - Add-Content - Get-Content - Set-Content - Microsoft.PowerShell.Utility - Export-Clixml - Export-Csv - Export-PSSession - Format-Hex - Import-Csv - Out-File - Select-String - Send-MailMessage バイトオーダーマーク バイトオーダーマーク(BOM)は、ファイルまたはテキストストリームの先頭の 数バイトにある Unicode の署名で、データに使用されている Unicode エンコード を示します。詳細については、バイトオーダーマークのドキュメントを参照して ください。 Windows PowerShell では、UTF7 を除くすべての Unicode エンコードで常に BOM が作成されます。PowerShell(v6 以降)は、すべてのテキスト出力で既定で utf8NoBOM を使用します。 全体的な互換性を最大にするには、UTF-8 ファイルで BOM を使用しないように してください。Unix プラットフォームや、Windows プラットフォームでも使用 される Unix 由来のユーティリティは、BOM をサポートしません。 同様に、UTF7 エンコードも避けるべきです。UTF-7 は標準の Unicode エンコード ではなく、すべてのバージョンの PowerShell で BOM なしで書き込まれます。 Unix 系のプラットフォームで PowerShell スクリプトを作成する場合、または Windows 上で Visual Studio Code などのクロスプラットフォームエディターを 使用する場合、ファイルは UTF8NoBOM でエンコードされます。これらのファイル は PowerShell では問題なく動作しますが、非 ASCII 文字を含む場合は Windows PowerShell で壊れる可能性があります。 スクリプトで非 ASCII 文字を使用する必要がある場合は、BOM 付きの UTF-8 で 保存してください。BOM がないと、Windows PowerShell はスクリプトを従来の 「ANSI」コードページでエンコードされていると誤って解釈します。逆に、 UTF-8 BOM が付いたファイルは Unix 系のプラットフォームで問題を起こす場合が あります。cat、sed、awk などの多くの Unix ツールや、gedit などの一部の エディターは、BOM の扱い方を知りません。 Windows PowerShell での文字エンコード PowerShell 5.1 では、Encoding パラメーターは次の値をサポートします。 - Ascii Ascii(7 ビット)文字セットを使用します。 - BigEndianUnicode ビッグエンディアンのバイト順で UTF-16 を使用します。 - BigEndianUTF32 ビッグエンディアンのバイト順で UTF-32 を使用します。 - Byte 文字のセットをバイトのシーケンスにエンコードします。 - Default システムのアクティブなコードページに対応するエンコード (通常は ANSI)を使用します。 - Oem システムの現在の OEM コードページに対応するエンコードを 使用します。 - String Unicode と同じです。 - Unicode リトルエンディアンのバイト順で UTF-16 を使用します。 - Unknown Unicode と同じです。 - UTF32 リトルエンディアンのバイト順で UTF-32 を使用します。 - UTF7 UTF-7 を使用します。 - UTF8 UTF-8(BOM 付き)を使用します。 一般に、Windows PowerShell は既定で Unicode の UTF-16LE エンコードを使用 します。ただし、Windows PowerShell のコマンドレットが使用する既定の エンコードには一貫性がありません。 注: UTF7 を除くすべての Unicode エンコードでは常に BOM が作成されます。 ファイルに出力を書き込むコマンドレットの場合: - Out-File とリダイレクト演算子 > および >> は UTF-16LE を作成します。 これは Set-Content や Add-Content とは大きく異なる点です。 - New-ModuleManifest と Export-Clixml も UTF-16LE ファイルを作成します。 - 対象ファイルが空または存在しない場合、Set-Content と Add-Content は Default エンコードを使用します。Default は、アクティブなシステム ロケールの ANSI レガシコードページで指定されるエンコードです。 - Export-Csv は Ascii ファイルを作成しますが、Append パラメーターを使用 する場合は異なるエンコードを使用します(後述)。 - Export-PSSession は既定で BOM 付きの UTF-8 ファイルを作成します。 - New-Item -Type File -Value は BOM なしの UTF-8 ファイルを作成します。 - Send-MailMessage は既定で Ascii エンコードを使用します。 - Start-Transcript は BOM 付きの Utf8 ファイルを作成します。Append パラメーターを使用する場合、エンコードは異なる場合があります(後述)。 既存のファイルに追記するコマンドの場合: - Out-File -Append とリダイレクト演算子 >> は、既存の対象ファイルの内容の エンコードに合わせようとはしません。代わりに、Encoding パラメーターが 使用されない限り既定のエンコードを使用します。内容を追記するときは、 ファイル本来のエンコードを使用する必要があります。 - 明示的な Encoding パラメーターがない場合、Add-Content は既存のエンコード を検出し、新しい内容に自動的に適用します。既存の内容に BOM がない場合は、 Default の ANSI エンコードが使用されます。Add-Content の動作は PowerShell(v6 以降)でも同じですが、既定のエンコードは Utf8 です。 - Export-Csv -Append は、対象ファイルに BOM が含まれる場合、既存の エンコードに合わせます。BOM がない場合は Utf8 エンコードを使用します。 - Start-Transcript -Append は、BOM を含むファイルの既存のエンコードに 合わせます。BOM がない場合は既定で Ascii エンコードになります。この エンコードは、トランスクリプト内のデータにマルチバイト文字が含まれる 場合、データの損失や文字化けを引き起こす可能性があります。 BOM がない状態で文字列データを読み取るコマンドレットの場合: - Get-Content と Import-PowerShellDataFile は Default の ANSI エンコードを 使用します。ANSI は、PowerShell エンジンがファイルからソースコードを 読み取るときにも使用するエンコードです。 - Import-Csv、Import-Clixml、Select-String は、BOM がない場合 Utf8 を 想定します。 PowerShell での文字エンコード PowerShell(v7.1 以降)では、Encoding パラメーターは次の値をサポート します。 - ascii ASCII(7 ビット)文字セットのエンコードを使用します。 - ansi 現在のカルチャの ANSI コードページのエンコードを使用 します。このオプションは PowerShell 7.4 で追加 されました。 - bigendianunicode ビッグエンディアンのバイト順で UTF-16 形式にエンコード します。 - bigendianutf32 ビッグエンディアンのバイト順で UTF-32 形式にエンコード します。 - oem MS-DOS およびコンソールプログラムの既定のエンコードを 使用します。 - unicode リトルエンディアンのバイト順で UTF-16 形式にエンコード します。 - utf7 UTF-7 形式にエンコードします。 - utf8 UTF-8 形式(BOM なし)にエンコードします。 - utf8BOM バイトオーダーマーク(BOM)付きの UTF-8 形式に エンコードします。 - utf8NoBOM バイトオーダーマーク(BOM)なしの UTF-8 形式に エンコードします。 - utf32 リトルエンディアンのバイト順で UTF-32 形式にエンコード します。 PowerShell はすべての出力で既定で utf8NoBOM を使用します。 PowerShell 6.2 以降、Encoding パラメーターでは、登録されたコードページの 数値 ID(-Encoding 1251 など)や、登録されたコードページの文字列名 (-Encoding "windows-1251" など)も使用できます。詳細については、.NET の ドキュメント Encoding.CodePage を参照してください。 PowerShell 7.4 以降では、Encoding パラメーターに ANSI 値を使用すると、 現在のカルチャの ANSI コードページの数値 ID を手動で指定せずに渡すことが できます。 既定のエンコードの変更 PowerShell には、既定のエンコードの動作を変更するために使用できる 2 つの 既定の変数があります。 - $PSDefaultParameterValues - $OutputEncoding 詳細については、about_Preference_Variables を参照してください。 PowerShell 5.1 以降、リダイレクト演算子(> および >>)は Out-File コマンドレットを呼び出します。そのため、次の例のように $PSDefaultParameterValues 設定変数を使用して、これらの既定のエンコードを 設定できます。 $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8' Encoding パラメーターを持つすべてのコマンドレットの既定のエンコードを 変更するには、次の文を使用します。 $PSDefaultParameterValues['*:Encoding'] = 'utf8' 重要: このコマンドを PowerShell プロファイルに記述すると、この設定は セッション全体のグローバル設定になり、エンコードを明示的に指定しない すべてのコマンドとスクリプトに影響します。 同様に、同じように動作させたいスクリプトやモジュールには、このような コマンドを含めるべきです。これらのコマンドを使用すると、別のユーザーが 実行した場合、別のコンピューターで実行した場合、または別のバージョンの PowerShell で実行した場合でも、コマンドレットが同じように動作することが 保証されます。 自動変数 $OutputEncoding は、PowerShell が外部プログラムと通信するときに 使用するエンコードに影響します。出力リダイレクト演算子や PowerShell コマンドレットがファイルに保存するときに使用するエンコードには影響しません。 関連項目 about_Preference_Variables Byte order mark Code Pages - Win32 apps Encoding.CodePage Introduction to character encoding in .NET The Unicode Standard UTF-16LE ---- 原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP |