Powershell用の文字固定長バイト区切り関数です。
SubStringや、GetBytesを使用したサンプルはいくつかありますが SJISやUTF-16のサロゲートが考慮されておらず、文字が途切れるため 正しい文字境界で区切る関数を作成しました。
文字 | UTF8 | UTF16-LE | SJIS |
---|---|---|---|
t | 74 | 74 00 | 74 |
e | 65 | 65 00 | 65 |
s | 73 | 73 00 | 73 |
t | 74 | 74 00 | 74 |
𠀋 | F0 A0 80 8B | 40 D8 0B DC | 3F(Error) |
日 | E6 97 A5 | E5 65 | 93 FA |
本 | E6 9C AC | 2C 67 | 96 7B |
語 | E8 AA 9E | 9E 8A | 8C EA |
- $text string バイト配列にする文字を含む文字列
- $count int バイト配列にするバイト数
- $enc_dst System.Text.Encoding 文字コードによって一文字のバイト数が異なるため、最初に出力したい文字列のEncodingを指定します。
- padding_str string 対象の文字が途切れた場合に代わりに詰める文字を指定 デフォルトは、空白
- Byte[] 指定した文字のセットをエンコードした結果を格納しているバイト配列。
# Sample 1
$enc_dst = [System.Text.Encoding]::GetEncoding('UTF-16')
$dst_bytes = GetFixBytes "test𠀋日本語" 11 $enc_dst "*"
[System.IO.File]::WriteAllBytes(".\write.txt", $dst_bytes)