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