|
View:
New views
6 Messages
—
Rating Filter:
Alert me
|
|
|
[ruby-list:46410] 再送;;ruby1.8.7と1.9.2の文字処理について昨日(9/24)発信しましたが、サーバからの返信がなかったので、再送しま す。 前川です。 Windows版Rubyの1.8.7と1.9.2での違いについて、教えてください。 1.8.7では、エラー発生しませんが、1.9.2(1.9系共通??)では、 エラーとなります。 どうすれば、1.9.2でのエラーが解消できるでしょうか コーディングは、以下です。 1 #!D:/Ruby/bin/ruby.exe -Ks 2 3 require 'kconv' 4 require 'nkf' 5 require 'D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclass' #MyClass 変換 メソッド等 6 7 # 試験データ 8 # 文字→HEXへ変換するためのデータ 9 10 data1 = '船海システムG' # 26バイトの '91448a43835683588365838047'に変換 する 11 data2 = 'TEST' # 8バイトの '54455354'に変換する 12 data3 ='船' 13 data4 ='kaisya会社123重厚重工業・・あaア /\¥' #←エラー1 14 data5 ='kaisya会社123重厚重工業あaイ ' #←エラー2 15 data6 ='会社' 16 data7 = 'C:/Apache2.2/htdocs/qmsPotalShip/confirmation/sjisコード表 textConversion用.html' 17 data8 = "12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画 面03:コメント記入前:船証.png" 〜以下略 デバッグ実行結果 バージョンの確認 D:\Apache2.2\htdocs\ruby_prg\ruby19check>ruby -v ruby 1.9.2dev (2009-07-18) [i386-mswin32] デバッグ実行(デバッガ使用) D:\Apache2.2\htdocs\ruby_prg\ruby19check>ruby -r debug myclassTextTest.rb Debug.rb Emacs support available. myclassTextTest.rb:13: invalid multibyte char (Windows-31J) #←エラー1 全 角・半角が含まれているため??エラー myclassTextTest.rb:14: syntax error, unexpected tIDENTIFIER, expecting $end #←エラー2 行の終わりの文字が、全角の空白だから??? data5 ='kaisya会社123重厚重工業あaイ ' となり、実行までには至っていません。 よろしくお願いします。 ちなみに、WINDOWS版は、 http://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ から、ダウンロードしています。 了 |
|
|
[ruby-list:46413] Re: 再送;;ruby1.8.7と1.9.2の文字処理についてFrom: eiichi_maekawa@...
Subject: [ruby-list:46410] 再送;;ruby1.8.7と1.9.2の文字処理について Date: Fri, 25 Sep 2009 07:39:56 +0900 るびきちです。 > myclassTextTest.rb:13: invalid multibyte char (Windows-31J) #←エラー1 全 > 角・半角が含まれているため??エラー > myclassTextTest.rb:14: syntax error, unexpected tIDENTIFIER, expecting $end > #←エラー2 行の終わりの文字が、全角の空白だから??? > data5 ='kaisya会社123重厚重工業あaイ ' 2行目に # -*- coding: windows-31j -*- と入れてみましょう。 Ruby 1.9系ではスクリプトエンコーディングを表すmagic commentが「必須」となります。 -- rubikitch Blog: http://d.hatena.ne.jp/rubikitch/ Site: http://www.rubyist.net/~rubikitch/ Twit: http://twitter.com/rubikitch/ 『Ruby逆引きハンドブック』 http://d.hatena.ne.jp/rubikitch/20090525/rubybook |
|
|
[ruby-list:46414] エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処理について前川です。
るびきちさん 結果は、以下でした。 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イ ' 〜以下略〜 2.結果 D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclassTextTest.rb:13: invalid multibyte char (Windows-31J) D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclassTextTest.rb:14: syntax error, unexpected tIDENTIFIER, expecting $end data5 ='kaisya会社123重厚重工業あaイ ' ^ Complete(1) 何が、まずかったのでしょうか。 Rubyは、1.9.1p129 です。 Ruby1.9.2devでも、同様のエラーが出ました。 rubikitch@... wrote on 2009/09/25 13:07:06: > From: eiichi_maekawa@... > Subject: [ruby-list:46410] 再送;;ruby1.8.7と1.9.2の文字処理について > Date: Fri, 25 Sep 2009 07:39:56 +0900 > るびきちです。 > > myclassTextTest.rb:13: invalid multibyte char (Windows-31J) #←エラー 1 全 > > 角・半角が含まれているため??エラー > > myclassTextTest.rb:14: syntax error, unexpected tIDENTIFIER, expecting $end > > #←エラー2 行の終わりの文字が、全角の空白だから??? > > data5 ='kaisya会社123重厚重工業あaイ ' > 2行目に > # -*- coding: windows-31j -*- > と入れてみましょう。 > Ruby 1.9系ではスクリプトエンコーディングを表すmagic commentが「必須」 > となります。 |
|
|
[ruby-list:46415] Re: エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処理について高橋征義です。
2009年9月25日19:04 <eiichi_maekawa@...>: > るびきちさん 結果は、以下でした。 > > 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@...) |
|
|
[ruby-list:46416] Re: エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処理についてこんにちは、なかむら(う)です。
In message "[ruby-list:46415] Re: エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処理について" on Sep.25,2009 20:16:21, <maki@...> wrote: > という前川さんの問題とは別に、このような文字列リテラルの挙動は > エラーで正しいのでしょうかね。ASCII文字では問題なさそうですし。 > 本来はどういう扱いであるべきなのでしょうか? バグでしょう。 Index: parse.y =================================================================== --- parse.y (revision 25091) +++ parse.y (working copy) @@ -5737,6 +5737,8 @@ parser_tokadd_string(struct parser_param } else if (c != term && !(paren && c == paren)) { tokadd('\\'); + pushback(c); + continue; } } } それでは。 -- U.Nakamura <usa@...> |
|
|
[ruby-list:46419] ;Re: Re: エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処理について前川です。
なかむら(う)さん、高橋さん ありがとうございます。 実施したいのは、そのまま、変換することです。 (エスケープシケンスの\は、仕方ありませんが・・・) (\\は、\にしかできませんが) 本体;; #!D:/Ruby/bin/ruby.exe #require 'kconv' #require 'nkf' require 'D:/Apache2.2/htdocs/qmsPotalShip/myclass' #MyClass 変換メソッド等 # 試験データ # 文字→HEXへ変換するためのデータ data1 = '船海システムG' # 26バイトの '91448a43835683588365838047'に変換する data2 = 'TEST' # 8バイトの '54455354'に変換する data3 ='船' data4 ='kaisya会社123重厚重工業・・あaア /\¥' data5 ='kaisya会社123重厚重工業あaイ ' data6 ='会社' data7 = 'C:/Apache2.2/htdocs/qmsPotalShip/confirmation/sjisコード表 textConversion用.html' data8 = "12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面 03:コメント記入前:船証.png" puts '文字からHEXへ変換' puts data1 + " → " + MyClassText.text_to_hex(data1) puts data2 + " → " + MyClassText.text_to_hex(data2) puts data3 + " → " + MyClassText.text_to_hex(data3) puts data4 + " → " + MyClassText.text_to_hex(data4) puts data5 + " → " + MyClassText.text_to_hex(data5) 〜以下略 MyClassText.text_to_hex(data?)は、以下 ##!C:/Ruby/bin/ruby.exe -Ks print "Content-Type: text/html\n\n" require 'kconv' # Stringの日本語関連メソッド require 'nkf' # 漢字関係 Network Kanji code conversion Filter version 1.7 require 'cgi' # CGI プログラムの支援ライブラリ require 'mysql' #MySQLライブラリ #require "rubygems" # ライブラリ管理ツール #require "dbi" CODES = { NKF::JIS => "JIS", NKF::EUC => "EUC", NKF::SJIS => "SJIS", NKF::BINARY => "BINARY", NKF::UNKNOWN => "UNKNOWN(ASCII)", } class MyClassText # 文字を16進数の文字コードに変換する def self.text_to_hex(data) data.unpack('H*')[0] end # 16進数の文字コードを文字に変換する def self.hex_to_text(data) data.gsub(/../){|c| c.hex.chr} end #string内の特定文字列を、指定した文字で置き換える。 #戻り値;置き換えた文字列 # 該当する文字列が存在しない場合は、元の文字列を返す def self.string_change(data,org,change) data.gsub( org, change ) end end #MyClassText 終了 実施結果 Content-Type: text/html 文字からHEXへ変換 船海システムG → 91448a43835683588365838047 TEST → 54455354 船 → 9144 kaisya会社123重厚重工業・・あaア /\¥ → 6b616973796189ef8ed03132338f648cfa8f648d488bc68145a582a061b12081402f5c818f kaisya会社123重厚重工業あaイ → 6b616973796189ef8ed03132338f648cfa8f648d488bc682a061b2208140 1.9系では、なかむら(う)さんより、バグとの指摘です。 > こんにちは、なかむら(う)です。 > In message "[ruby-list:46415] Re: エラーでした;Re: Re: 再 > 送;;ruby1.8.7と1.9.2の文字処理について" > on Sep.25,2009 20:16:21, <maki@...> wrote: > > という前川さんの問題とは別に、このような文字列リテラルの挙動は > > エラーで正しいのでしょうかね。ASCII文字では問題なさそうですし。 > > 本来はどういう扱いであるべきなのでしょうか? > バグでしょう。 > Index: parse.y > =================================================================== > --- parse.y (revision 25091) > +++ parse.y (working copy) > @@ -5737,6 +5737,8 @@ parser_tokadd_string(struct parser_param > } > else if (c != term && !(paren && c == paren)) { > tokadd('\\'); > + pushback(c); > + continue; > } > } > } 1.8系で、進めることにします。 今、作成中のシステムでは、上記の文字変換が、必須です。 また、逆に16進コードから、文字への変換も必要です。 文字→HEX→文字 の場合は、 kaisya会社123重厚重工業・・あaア /\¥ → 6b616973796189ef8ed03132338f648cfa8f648d488bc68145a582a061b12081402f5c818f → kaisya会社123重厚重工業・・あaア /\¥ という結果がほしいのです。 ありがとうございました。 しかし、1.9系で、# -*- coding: windows-31j -*-を2行目rに追加しても 実行できない原因は、不明のままです。 どなたか、ご教示ください。 [ruby-list:46414] エラーでした;Re: Re: 再送;;ruby1.8.7と1.9.2の文字処 理について > 2.結果 > D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclassTextTest.rb:13: invalid > multibyte char (Windows-31J) > D:/Apache2.2/htdocs/ruby_prg/ruby19check/myclassTextTest.rb:14: syntax > error, unexpected tIDENTIFIER, expecting $end > data5 ='kaisya会社123重厚重工業あaイ ' > ^ > Complete(1) > 何が、まずかったのでしょうか。 > Rubyは、1.9.1p129 です。 > Ruby1.9.2devでも、同様のエラーが出ました。 |
| Free embeddable forum powered by Nabble | Forum Help |