SJISの固定長を扱う

Visualworksでは全角文字も1文字として扱う。
全角文字を含む文字列で、全角文字を2バイトとして扱う(SJIS)場合に、
バイト単位で切り出すのが意外と難しい。
こんな感じでどうだ?

size := 8.
org := 'a~d~f~g~h~j~'.
org := ((org asByteArrayEncoding: #MS_CP_932) copyFrom: 1 to: (size min: org sizeInBytes)) readStream.
sjis := MSCP932StreamEncoder asEncoder.
string := WriteStream on: (String new: size).
[org atEnd] whileFalse:
    [| i |
    i := (sjis nextFrom: org).
    string nextPut: (i ifNil: [Character space] ifNotNil: [i])].
string contents

stringを'ほげ.txt' asFilename とかにしておけばファイルに書き込むことが可能。
最後の半分に切れた全角文字はMSCP932StreamEncoderがnilを返すので、
今回はそれを半角スペースに変換している。
ShiftJISStreamEncoder というのももあるが波線があるとうまくいかない。

タグ:

+ タグ編集
  • タグ:
最終更新:2011年09月30日 09:52
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。