私はUTF-8文字列を扱っています。文字ベースではなく、バイトベースのインデックスを使用してスライスを取得する必要があります。
Web で への参照を見つけましたString#subseq
。これは のようなはずですString#[]
が、バイトです。残念ながら、1.9.1 にはなっていないようです。
さて、なぜ私はそれをしたいのですか?マルチバイト文字の途中でスライスすると、無効な文字列になる可能性があります。これはひどい考えのように聞こえます。
さて、私は を使用していStringScanner
ますが、その内部ポインターはバイトベースであることがわかりました。ここで他のオプションを受け入れます。
これが私が今取り組んでいるものですが、かなり冗長です:
s.dup.force_encoding("ASCII-8BIT")[ix...pos].force_encoding("UTF-8")
と はどちらもix
からpos
来てStringScanner
いるので、バイトベースです。