[ruby-list:46411] 再送;;Rubyに対する文字コード指定方法について
From:
eiichi_maekawa@...
Date:
2009-09-24 22:41:00 UTC
List:
ruby-list #46411
昨日(9/24)発信しましたが、サーバからの発信が確認できませんでしたの
で、再送します。
前川です。
基本敵な質問ですが、Rubyに文字コードを教えるため、
シフトJISの場合、#! d:/ruby/bin/ruby.exe -Ks
と、記述しますが、
本体から requireで紐付けしたソース(プライベートのクラス)にも、
-Ksを記述すると、エラーが生じます。
本体側も、紐付けしたソース側も、文字コードを設定する場合は、-Ks等の
指定が必要だと思いますが、エラーになるのは、どうしてでしょうか?
何か、設定が悪いのでしょうか?教えてください。
ソースコーディングと実施結果は、以下です。
(冗長になりますが、よろしくお願いします。)
1.コーディング(クラスを呼ぶ側)
#!D:/Ruby/bin/ruby.exe #←-Ks を追加するとえらーになる。require側でも-Ksと設
定しているため???
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イ '
data6 ='会社'
data7 = 'C:/Apache2.2/htdocs/qmsPotalShip/confirmation/sjisコード表
textConversion用.html'
data8 = "12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面
03:コメント記入前:船証.png"
puts '文字からHEXへ変換'
puts data8 + " → " + MyClassText.text_to_hex(data8)
hexData1 = '91448a43835683588365838047'
hexData2 = '54455354'
hexData3 = '9144'
hexData4 = '6b616973796189ef8ed03132338f648cfa8f648d488bc682a061b1'
hexData5 = '6b616973796189ef8ed03132338f648cfa8f648d488bc682a061'
hexData6 = '89ef8ed0'
hexData7 =
'433a2f417061636865322e322f6874646f63732f716d73506f74616c536869702f636f6e6669726d6174696f6e2f736a69738352815b8368955c74657874436f6e76657273696f6e97702e68746d6c'
hexData8 =
"31325f46425359535f95738bef8d878fee95f193fc97cd2d8f8a93e08d488e962891ac95f12920323391448fd891e68e4f8a6d94468ed282cc8a6d944689e696ca3033814683528381839383678b4c93fc914f814691448fd82e706e67"
hexData9 = "8e4f9548814091be9859"
puts "HEXから文字変換"
puts hexData9 + " → " + MyClassText.hex_to_text(hexData9) #←requireのコード
を呼ぶ
puts "文字→HEX→文字"
data = MyClassText.text_to_hex(data8)
puts data8 + " → " + data + " → " + MyClassText.hex_to_text(data)
2.コーディング(クラス側)
#!D:/ruby/bin/ruby.exe -Ks #←SJISを設定
##!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
3.エラーメッセージ
D:\Apache2.2\htdocs\ruby_prg\ruby19check>ruby -r debug myclassTextTest.rb
Debug.rb
Emacs support available.
myclassTextTest.rb:14: syntax error
data5 ='kaisya会社123重厚重工業あaイ '
^
myclassTextTest.rb:14: Invalid char `\262' in expression
myclassTextTest.rb:15: syntax error
data6 ='会社'
^
myclassTextTest.rb:16: syntax error
data7 = 'C:/Apache2.2/htdocs/qmsPotalShi...
^
myclassTextTest.rb:16: unknown regexp options - htdc
myclassTextTest.rb:16: syntax error
myclassTextTest.rb:18: syntax error
puts '文字からHEXへ変換'
^
myclassTextTest.rb:23: syntax error
hexData1 = '91448a43835683588365838047'
^
myclassTextTest.rb:24: syntax error
hexData2 = '54455354'
^
myclassTextTest.rb:25: syntax error
hexData3 = '9144'
^
myclassTextTest.rb:26: syntax error
hexData4 = '6b616973796189ef8ed03132338f648cfa8f648d488bc682a061b1'
^
myclassTextTest.rb:27: syntax error
hexData5 = '6b616973796189ef8ed03132338f648cfa8f648d488bc682a061'
^
myclassTextTest.rb:28: trailing `e' in number
hexData6 = '89ef8ed0'
^
myclassTextTest.rb:28: syntax error
hexData6 = '89ef8ed0'
^
myclassTextTest.rb:29: syntax error
hexData7 = '433a2f417061636865322e322f6874646...
^
myclassTextTest.rb:29: unterminated string meets end of file
D:\Apache2.2\htdocs\ruby_prg\ruby19check>ruby -r debug myclassTextTest.rb
Debug.rb
Emacs support available.
myclassTextTest.rb:3:require 'kconv'
(rdb:1) c
Content-Type: text/html
文字からHEXへ変換
12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面03:コメン
ト記入前:船証.png →
31325f46425359535f95738bef8d878fee95f193fc97cd2d8f8a93e08d488e962891ac95f12920323391448fd891e68e4f8a6d94468ed282cc8a6d944689e696ca3033814683528381839383678b4c93
fc914f814691448fd82e706e67
HEXから文字変換
8e4f9548814091be9859 → 三菱 太郎
文字→HEX→文字
12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面03:コメン
ト記入前:船証.png →
31325f46425359535f95738bef8d878fee95f193fc97cd2d8f8a93e08d488e962891ac95f12920323391448fd891e68e4f8a6d94468ed282cc8a6d944689e696ca3033814683528381839383678b4c93
fc914f814691448fd82e706e67 → 12_FBSYS_不具合情報入力-所内工事(速報) 23船証
第三確認者の確認画面03:コメント記入前:船証.png
4.正常時(syntaxエラーは、一切なし)
D:\Apache2.2\htdocs\ruby_prg\ruby19check>ruby -r debug myclassTextTest.rb
Debug.rb
Emacs support available.
myclassTextTest.rb:3:require 'kconv'
(rdb:1) c
Content-Type: text/html
文字からHEXへ変換
12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面03:コメン
ト記入前:船証.png →
31325f46425359535f95738bef8d878fee95f193fc97cd2d8f8a93e08d488e962891ac95f12920323391448fd891e68e4f8a6d94468ed282cc8a6d944689e696ca3033814683528381839383678b4c93
fc914f814691448fd82e706e67
HEXから文字変換
8e4f9548814091be9859 → 三菱 太郎
文字→HEX→文字
12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面03:コメン
ト記入前:船証.png →
31325f46425359535f95738bef8d878fee95f193fc97cd2d8f8a93e08d488e962891ac95f12920323391448fd891e68e4f8a6d94468ed282cc8a6d944689e696ca3033814683528381839383678b4c93
fc914f814691448fd82e706e67 → 12_FBSYS_不具合情報入力-所内工事(速報) 23船証
第三確認者の確認画面03:コメント記入前:船証.png
D:\Apache2.2\htdocs\ruby_prg\ruby19check>
以上
***********************************
三菱重工業㈱長崎造船所
船舶品質保証部 品質保証グループ
前川
TEL:5651 外線;095-828-5651
***********************************