* テキストファイルの読み込み書き出し - Get-Content他 [#y267df62]

** 前提 [#w0b9ab98]
*** PowerShellは文字列を(バイト列ではなく)文字列として認識する [#p028310c]
 PS> (echo "こんにちは").GetType()
 
 IsPublic IsSerial Name   BaseType
 -------- -------- ----   --------
 True     True     String System.Object

 PS tmp> (echo "こんにちは").Length
 5

*** PowerShellの内部文字コードはUTF16 [#w9b78eaf]
 echo こんにちは > utf16.txt
- PowerShellの内部文字コードはUTF16(UTF16LE)。
- コマンドレットの出力をリダイレクトでファイルにするとUTF16で保存される。

*** 日本語PowerShellのデフォルト文字コードはSJIS [#h42b5745]
- 日本語PowerShellのデフォルト文字コードはSJIS。
- 内部文字コードとデフォルト文字コードを分けて扱う。

** テキストファイルの読み込み [#z3f15012]
 Get-Content utf16.txt
 Get-Content sjis.txt > utf16.txt
 Get-Content -Encoding UTF8 utf8.txt > utf16.txt
 Get-Content -Encoding Default sjis.txt > utf16.txt
- テキストファイルの読み込みにはGet-Contentコマンドレットを使う。
- 日本語PowerShellの場合、Get-ContentはUTF16またはSJISのテキストファイルを読み取れる。
- UTF16やSJIS以外のファイルを読み込むには-Encodingオプションで文字コードを指定する。
- 指定出来る文字コードはUTF8やAscii等でEUC-JPやJISは指定出来ない。
- -Encoding Defaultと指定するとSJISを指定する事になる。

** テキストファイルの書き出し [#le6b95c8]
 Get-Content -Encoding UTF8 utf8.txt | Set-Content sjis.txt
 Get-Content sjis.txt | Set-Content -Encoding UTF8 utf8.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を使う。
- Set-Contentはデフォルトの文字コードであるSJISで書き出される。
- Out-Fileは内部文字コードであるUTF16で書き出される。

** UTF8のBOMの除去 [#mcc8546d]
*** PowerShellによる [#s548f397]
 [System.IO.File]::WriteAllLines("utf8.txt", "utf8.txt")
*** nkfコマンドによる [#ed7e99c4]
 nkf.exe -W8 -w --overwrite utf8.txt


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