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

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

16 messages 2013/01/29

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

From: Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>
Date: 2013-01-29 12:20:38 UTC
List: ruby-list #49157
いおがわ様

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

target = data.force_encoding("BINARY").slice(0,72).force_encoding("Windows-31J") ;  

で、encodingの問題も、実行性能も、無事に解決できました。

> # ただ、force_encoding に頼るのはあまりよい方法ではない、と
> # 考えますが。。。

ですよね。
他人が見て、何をやっているのか一目で理解できるコードかと言うと、ちょっと悩ましい。
でも、とってもシンプルなコードになりました。
ありがとうございます。
あとはコメントで凌ぐということで・・・・

> ところで、余計なお世話ですが、1バイト文字とマルチバイト文字の
> 混在する文字列を問答無用でぶった切るとあまりよくないことが
> 起こったりしませんか? 特にSJISで"\" なんかが絡んでくると
> いやらしいバグが出そうで気になります

はい、おっしゃる通りで、普通はこんなことはしないのですが、
今回は、固定書式のCOBOLソースの解析なので、コメント行以外に
72バイト目を跨る2バイトコードは存在しないという前提です。

ありがとうございました。

横塚


<5107AF72.9030507@246.ne.jp> の、
   "[ruby-list:49156] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます" において、
   "Takeshi Iogawa <alpha@246.ne.jp>"さんは書きました:

> いおがわと申します。
> MLの参加自体新参者なので僭越ですが。。。
> 
> str = "7bit asciiが混じった長い文字列"
> enc = str.encoding
> str.force_encoding("BINARY").slice(0,72).force_encoding(enc)
> 
> ではいかがでしょう?
> # ただ、force_encoding に頼るのはあまりよい方法ではない、と
> # 考えますが。。。
> 
> ところで、余計なお世話ですが、1バイト文字とマルチバイト文字の
> 混在する文字列を問答無用でぶった切るとあまりよくないことが
> 起こったりしませんか? 特にSJISで"\" なんかが絡んでくると
> いやらしいバグが出そうで気になります
> 

--
Daisuke Yokotsuka

In This Thread