編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

テキストファイルの入出力と文字コード

前提

PowerShellは文字列を(バイト列ではなく)文字列として認識する

PS> (echo "こんにちは").GetType()

IsPublic IsSerial Name   BaseType
-------- -------- ----   --------
True     True     String System.Object
PS tmp> (echo "こんにちは").Length
5

PowerShellの内部文字コードはUTF16

echo "こんにちは" > utf16.txt
  • PowerShellの内部文字コードはUTF16(UTF16LE)。
  • 従って、コマンドレットの出力をリダイレクトでファイルにすると標準ではUTF16で保存される。

日本語PowerShellのデフォルト文字コードはSJIS

  • 日本語PowerShellのデフォルト文字コードはSJIS。
  • 内部文字コードとデフォルト文字コードを分けて扱う。

テキストファイルの読み込み

Get-Content utf16.txt
Get-Content sjis.txt
Get-Content utf8-bom.txt
Get-Content -Encoding UTF8 utf8-nobom.txt
  • テキストファイルの読み込みにはGet-Contentコマンドレットを使う。
  • 日本語PowerShellの場合、Get-ContentはUTF16、SJIS、UTF8(BOMあり)のテキストファイルを読み取れる。
  • それら以外のファイルを読み込むには-Encodingオプションで文字コードを指定する。
  • 例えばUTF8(BOMなし)なら Get-Content -Encoding UTF8と指定する。EUC-JPやJISは指定出来ない。
  • -Encoding Defaultと指定するとSJISを指定する事になる。

テキストファイルの書き出し

Get-Content -Encoding UTF8 utf8.txt | Set-Content sjis.txt
Get-Content sjis.txt | Set-Content -Encoding UTF8 utf8-bom.txt
Get-Content -Encoding UTF8 utf8.txt | Out-File utf16.txt
Get-Content -Encoding UTF8 utf8.txt | Out-File -Encoding default sjis.txt
  • テキストファイルの書き出しにはSet-ContentかOut-Fileを使う。
    • これらのコマンドレットの代わりにリダイレクト">"を使ってもよいが、その場合はUTF16固定になる。
  • Set-Contentはデフォルトの文字コードであるSJISで書き出される。
  • Out-Fileは内部文字コードであるUTF16で書き出される。

UTF8のBOMの除去

PowerShellによる

[System.IO.File]::WriteAllLines("utf8-bom.txt", "utf8-nobom.txt")

nkfコマンドによる

nkf.exe -W8 -w --overwrite utf8.txt

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2016-08-12 (金) 23:35:01 (617d)