高橋征義です。

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)