Techioz Blog

Ruby: UTF-8文字列をバイト長で制限する

概要

この RabbitMQ ページには次のように記載されています。

Ruby (1.9.3) では、UTF-8 文字列を文字の途中で改行せずにバイト数で切り詰めるにはどうすればよいですか?結果の文字列は、バイト制限内に収まる可能な限り長い有効な UTF-8 文字列である必要があります。

解決策

Rails >= 3.0 の場合、ActiveSupport::Multibyte::Chars 制限メソッドがあります。

API ドキュメントから:

- (Object) limit(limit) 

文字列のバイト サイズを、文字を分割しないバイト数に制限します。何らかの理由で文字列のストレージが制限されている場合に使用します。

例:

'こんにちは'.mb_chars.limit(7).to_s # => "こん"