documents:proglang:powershell:powershell-005
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン | |||
| documents:proglang:powershell:powershell-005 [2026/05/13 07:21] – [ファイル調査2:バイト配列から文字列に変換] k896951 | documents:proglang:powershell:powershell-005 [2026/05/30 18:20] (現在) – ↷ 移動操作に合わせてリンクを書き換えました。 k896951 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== 101.ファイル調査2:バイト配列から文字列に変換 ====== | ||
| + | |||
| + | 2025-09-10\\ | ||
| + | 自分用メモ | ||
| + | |||
| + | ===== これは何? ===== | ||
| + | |||
| + | PowerShellでバイト列から文字列を表示させる簡単な例。 | ||
| + | |||
| + | [[powershell-004]]の続きで、項目NAMEを文字列として表示したい場合に対応している。 | ||
| + | |||
| + | |||
| + | ===== 項目NAME値の調査をする ===== | ||
| + | |||
| + | 項目NAMEは漢字の項目で、H社ホストでは漢字コードにSJISを使っている事も分かっている。項目NAMEをバイト列から文字列に直して表示してみればいい。 | ||
| + | |||
| + | {{..: | ||
| + | |||
| + | ==== 項目NAMEの変換 ==== | ||
| + | |||
| + | ファイル内容をバイト配列として保存し、配列の範囲を System.Text.Encodingオブジェクトに与えて文字列に戻してあげる。 | ||
| + | |||
| + | 項目NAMEは | ||
| + | * 1レコード目:配列要素 | ||
| + | * 2レコード目:配列要素 14番~27番で、18~25番 | ||
| + | * 3レコード目:配列要素 28番~41番で、32~39番 | ||
| + | |||
| + | となる。 | ||
| + | |||
| + | 文字列に戻した結果、 | ||
| + | * 1レコード目は「柴犬 」 | ||
| + | * 2レコード目は「柴犬 」 | ||
| + | * 3レコード目は「土佐犬 」 | ||
| + | |||
| + | となった。 | ||
| + | |||
| + | ^ レコード ^ バイト範囲 | ||
| + | | 1 | 4~11 | ||
| + | | 2 | 18~25 | ||
| + | | 3 | 32~39 | ||
| + | |||
| + | |||
| + | |||
| + | ==== PowerShell 7.5 の場合 ==== | ||
| + | |||
| + | Get-Content のオプションが 5.1 のものとは違うので注意。 | ||
| + | |||
| + | < | ||
| + | PS E:\WK> $PSVersionTable | ||
| + | |||
| + | Name Value | ||
| + | ---- ----- | ||
| + | PSVersion | ||
| + | PSEdition | ||
| + | GitCommitId | ||
| + | OS | ||
| + | Platform | ||
| + | PSCompatibleVersions | ||
| + | PSRemotingProtocolVersion | ||
| + | SerializationVersion | ||
| + | WSManStackVersion | ||
| + | |||
| + | |||
| + | PS E:\WK> $bindata = Get-Content -Path SAMPLEBIN -AsByteStream -Raw ← ファイルをバイト型配列としてメモリに確保する。 | ||
| + | PS E:\WK> $enc = [System.Text.Encoding]:: | ||
| + | PS E:\WK> $bindata[4..11] | Format-Hex | ||
| + | |||
| + | | ||
| + | |||
| + | Offset Bytes Ascii | ||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | ------ ----------------------------------------------- ----- | ||
| + | 0000000000000000 8E C4 8C A2 81 40 81 40 | ||
| + | |||
| + | PS E:\WK> $enc.GetString($bindata[4..11]) | ||
| + | 柴犬 ← しばいぬ | ||
| + | PS E:\WK> $bindata[18..25] | Format-Hex | ||
| + | |||
| + | | ||
| + | |||
| + | Offset Bytes Ascii | ||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | ------ ----------------------------------------------- ----- | ||
| + | 0000000000000000 8E C4 8C A2 81 40 81 40 | ||
| + | |||
| + | PS E:\WK> $enc.GetString($bindata[18..25]) | ||
| + | 柴犬 ← しばいぬ | ||
| + | PS E:\WK> $bindata[32..39] | Format-Hex | ||
| + | |||
| + | | ||
| + | |||
| + | Offset Bytes Ascii | ||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | ------ ----------------------------------------------- ----- | ||
| + | 0000000000000000 93 79 8D B2 8C A2 81 40 | ||
| + | |||
| + | PS E:\WK> $enc.GetString($bindata[32..39]) | ||
| + | 土佐犬 ← とさいぬ?とさけん? | ||
| + | PS E:\WK> | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== PowerShell 5.1 の場合 ==== | ||
| + | |||
| + | Get-Content のオプションが 7.5 のものとは違うので注意。 | ||
| + | |||
| + | < | ||
| + | PS E:\WK> $PSVersionTable | ||
| + | |||
| + | Name Value | ||
| + | ---- ----- | ||
| + | PSVersion | ||
| + | PSEdition | ||
| + | PSCompatibleVersions | ||
| + | BuildVersion | ||
| + | CLRVersion | ||
| + | WSManStackVersion | ||
| + | PSRemotingProtocolVersion | ||
| + | SerializationVersion | ||
| + | |||
| + | |||
| + | PS E:\WK> $bindata = Get-Content -Path SAMPLEBIN -Raw -Encoding Byte ← ファイルをバイト型配列としてメモリに確保する。 | ||
| + | PS E:\WK> $enc = [System.Text.Encoding]:: | ||
| + | PS E:\WK> $bindata[4..11] | Format-Hex | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | |||
| + | 00000000 | ||
| + | |||
| + | |||
| + | PS E:\WK> $enc.GetString($bindata[4..11]) | ||
| + | 柴犬 ← しばいぬ | ||
| + | PS E:\WK> $bindata[18..25] | Format-Hex | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | |||
| + | 00000000 | ||
| + | |||
| + | |||
| + | PS E:\WK> $enc.GetString($bindata[18..25]) | ||
| + | 柴犬 ← しばいぬ | ||
| + | PS E:\WK> $bindata[32..39] | Format-Hex | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | |||
| + | 00000000 | ||
| + | |||
| + | |||
| + | PS E:\WK> $enc.GetString($bindata[32..39]) | ||
| + | 土佐犬 ← とさいぬ?とさけん? | ||
| + | PS E:\WK> | ||
| + | </ | ||
| + | |||
| + | |||
| + | {{tag> 技術資料 Windows PowerShell System.Text.Encoding}} | ||
| + | |||
documents/proglang/powershell/powershell-005.txt · 最終更新: by k896951
