[#49148] Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます — Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>

はじめまして。横塚と申します。

16 messages 2013/01/29

[ruby-list:49151] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます

From: Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>
Date: 2013-01-29 10:36:06 UTC
List: ruby-list #49151
sorah様

ご教示、ありがとうございます。

> data.bytes.take(72) で 72 バイトを Array で取得できるので、String で欲しければそれを join すれば
> String が取れると思います。

実際にやってみましたが、

"ああああああああああああああああああああああああああああああああああああ"
という内容のdataに対して、

target = data.bytes.take(72).join ;

というコードを実行すると、targetの内容は
130160130160130160130160130160130160130160130160130160130160130160130160 ・・・
という文字列になってしまいます。

そのため

temp = data.bytes.take(72) ;
target = "" ; 
temp.each do | x | 
	target = target + x.chr ; 
end 

というコードにしてみましたが、getbyteと同様に、出来上がったtargetが強制的にASCIIと看做され、
targetに対して、SJISコードの正規表現を使うと
incompatible encoding regexp match (Windows-31J regexp with ASCII-8BIT string)
というエラーになってしまいました。

私のやりたいことは、72バイトを切り出すだけで、出来上がった部分文字列のコード系は
もとのコード系を引き継いで欲しいのですが、他になにか良いお知恵がございましたら、
ご教示賜りたく、よろしくお願い致します。

横塚

<CA+wiQwsFrTTjm=5K6SNaqcNdtXyR9UyAHN5V=01-1752mWnMLg@mail.gmail.com> の、
   "[ruby-list:49149] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます" において、
   ""Shota Fukumori (sora_h)" <sorah@tubusu.net>"さんは書きました:

> 
> sorahです。
> 
> On Tuesday, January 29, 2013, Daisuke Yokotsuka wrote:
> 
> > はじめまして。横塚と申します。
> > 昨年の11月からRubyの勉強を始めた新参者です。
> > よろしく、お願い致します。
> >
> > 題名の通り、Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます。
> > どなたか、良い知恵が有りましたら、ご教示下さいませ。
> >
> > もし、このMLはそのような場では無いということでしたら、申し訳ありません。
> > 読み捨てて下さい。
> >
> > さて、やりたいことは、SJIS漢字とASCIIの混在した文字列から、
> > 先頭の72バイトを抜き出したいということです。
> 
> data.bytes.take(72) で 72 バイトを Array で取得できるので、String で欲しければそれを join すれば
> String が取れると思います。
> 
> String#bytes 、 Enumerable#.take のリファレンスをお読みください。
> 
> 
> 
> -- 
> Shota Fukumori a.k.a. @sora_h - http://sorah.jp/
> 
> 
> 
> 


--
Daisuke Yokotsuka

In This Thread