Get-Contentで文字コードを指定してファイルを読み込む
JOSMで作成した地物データファイルをPowerShellで読み込もうとしたところエラーになってしまいました。
PS > $a = [xml](Get-Content .\基準点.xml)
値 "System.Object[]" を型 "System.Xml.XmlDocument" に変換できません。エラー: "'<' (16 進数値 0x3C) は無効な属性文字です。 行 12、位置 5 です。" 発生場所 行:1 文字:11 + $a = [xml] <<<< (Get-Content .\基準点.xml) + CategoryInfo : NotSpecified: (:) []、RuntimeException + FullyQualifiedErrorId : RuntimeException
構造に問題があるのかと思ったけどInternetExplorerなどではエラーなく表示できるので問題ないはず。
xyzzyで「基準点.xml」を開いてみたところ文字コードが「utf8n」となっていました、BOMなしのUTF-8のようです。
BOMがないことによって文字コードの判別に失敗したPowerShellがエラーを起こした模様。
Get-Contentで読み込む際に文字コードを指定できれば解決しそうということで「-Encoding UTF8」を付けて実行してみたところうまく解釈してくれました。
PS > $a = [xml](Get-Content -Encoding UTF8 .\基準点.xml)
Get-HelpしてもGet-Contentに「-Encoding」のオプションなんて出てこなかったような気がするけどこれでイケました。
2014/04/24追記
////ココカラ
日本語ヘルプの入っていないPowerShellだと「-Encoding」のオプションが表示されるようです。
環境によってちょっと異なるようですね。
////ココマデ