日本語を制限バイト数に合わせる

Ruby にて、日本語を含む文字列を制限バイト数に切る話し、制限バイトの所でマルチバイトの途中だったら直前の文字までにする。そしてあまりに半角空白を詰めたり詰めなかったり。どうしましょう。
環境としては、Ruby は 1.8系(1.8.6/1.8.7)、全体としてはユニコード(UTF-8)で問題の文字列はシフトJIS(入力はUTF8)、バイト数制限はシフトJISとしてのバイト数。
文字列の「[n, m]」とか使えばバイト数で切るのは簡単だが、マルチバイトの欠片が残ったときにどうすれば良いいでしょう。
String#slice で「/\A.*/」をマッチさせて文字になってるのを取るとかは、スクリプト自体がユニコードで実行されてるので正規表現シフトJISとマッチするのかどうか心許ない。
(やってみたらやっぱりおかしい)
というわけで、NKF を二度掛けしたらなんとかなった。

NKF.nkf '-S -s', NKF.nkf('-W -s', <所要の文字列(UTF8)>)[0, <制限バイト数>]