[#46340] ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — "(株)ネットフォレスト 植田裕之" <ueda@...>

植田と申します。

10 messages 2009/09/01
[#46344] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — arton <artonx@...> 2009/09/01

artonです。

[#46345] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — "NARUSE, Yui" <naruse@...> 2009/09/01

成瀬です。

[ruby-list:46415] Re: エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処理について

From: masayoshi takahashi <maki@...>
Date: 2009-09-25 11:16:21 UTC
List: ruby-list #46415
高橋征義です。

2009年9月25日19:04  <eiichi_maekawa@mhi.co.jp>:
> るびきちさん 結果は、以下でした。
>
> 1.コーディング
>
> #!D:/Ruby/bin/ruby.exe
> # -*- coding: windows-31j -*-
> require 'kconv'
> require 'nkf'
> require 'D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclass' #MyClass 変換メ
> ソッド等
>
> # 試験データ
> # 文字→HEXへ変換するためのデータ
>
> data1 = '船海システムG' # 26バイトの '91448a43835683588365838047'に変換する
> data2 = 'TEST' # 8バイトの '54455354'に変換する
> data3 ='船'
> data4 ='kaisya会社123重厚重工業・・あaア /\¥'
> data5 ='kaisya会社123重厚重工業あaイ '
> 〜以下略〜

気になったので確認してみました。
Ruby 1.9では、マルチバイト文字を「\」でエスケープ?しようと
した文字列、例えば '\あ' みたいな文字列リテラルは
「invalid multibyte char」のエラーが発生することがあるようです。

  C:\Users\takahashi\Desktop>cat test2.rb
  # -*- coding: windows-31j -*-
  str = '\あ'

  C:\Users\takahashi\Desktop>ruby -v test2.rb
  ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-mswin32]
  test2.rb:2: invalid multibyte char (Windows-31J)
  test2.rb:2: unterminated string meets end of file


とはいえ、前川さんが意図していたdata4は上記のプログラムでの実装とは
異なるのではないでしょうか。実は「あaア /\¥」ではなく「あaア /\\¥」
または「あaア /¥」が正しかったりはしないですか? であれば
これを修正していただくのが確実です。

という前川さんの問題とは別に、このような文字列リテラルの挙動は
エラーで正しいのでしょうかね。ASCII文字では問題なさそうですし。
本来はどういう扱いであるべきなのでしょうか?

高橋征義 (maki@rubycolor.org)

In This Thread