[#45527] Windows版のrubyで行末に \d をつけない方法もしくはbynary出力 — しん <dezawa@...>
出沢です
4 messages
2008/10/03
[#45566] SNMP Libraryのerror_status=1(tooBig)について — "徳島学" <manabu.tokushima@...>
みなさま、こんばんは。とくしまと申します。
5 messages
2008/10/18
[#45572] 簡潔なHASH値のインクリメント — IIDAYUICHI <y_iida@...>
IIDA_Y と申します。
11 messages
2008/10/21
[#45587] ActiveScriptRubyのヘッダファイル — "AOKI Shigeru" <saoki@...>
青木@ナセ工企と申します。
6 messages
2008/10/23
[#45593] Mac OS X でコンパイルした Ruby は遅い? — HIGAKI Masaru (ひがき まさる) <mash@...>
ひがきです。
7 messages
2008/10/26
[#45598] Re: Mac OS X でコンパイルした Ruby は遅い?
— kimura wataru <kimuraw@...>
2008/10/28
木村(わ)といいます。
[ruby-list:45534] Re: strscanのgetchのサンプルスクリプトでエラーがでる。
From:
"NARUSE, Yui" <naruse@...>
Date:
2008-10-05 07:37:44 UTC
List:
ruby-list #45534
成瀬です。
Kouya wrote:
> strscanのリファレンスマニュアルを書いています。
>
> 添付したサンプルがruby 1.9 では動かないのですが、
> 1.9では何か変更する必要があるのでしょうか。
> よろしくお願いします。
>
>
> サンプル
>
> require 'strscan'
>
> $KCODE = "e"
> s = StringScanner.new("るびい") # 文字コードはEUC-JPとします
> $KCODE = 'n' # 単なるバイト列として認識されます
> p s.getch # => "\244"
> p s.getch # => "\353"
> $KCODE = "e" # EUC-JPの文字列として認識されます
> p s.getch # => "び"
> p s.getch # => "い"
> p s.getch # => nil
>
> 以下出力
>
> ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.2.0]
> "\244"
> "\353"
> "び"
> "い"
> nil
>
> ruby 1.9.0 (2008-10-05 revision 18293) [i386-darwin9.5.0]
> s1_euc.rb:5: invalid multibyte char (US-ASCII)
> s1_euc.rb:5: invalid multibyte char (US-ASCII)
> s1_euc.rb:5: syntax error, unexpected $end, expecting ')'
> s = StringScanner.new("るびい") # 文字コードはEUC-JPとします
1.9 のテストありがとうございます。
まず、1.9 では $KCODE は廃止になっています。
なので、$KCODE は効果を持ちません。
次に、英数記号以外、ひらがなや漢字などをスクリプト内に書く場合は、
$KCODE でなく、magic comment を用います。
今回の invalid multibyte char というエラーは、
magic comment による指定がないため、スクリプトが、
US-ASCII で書かれているとみなされたために出ています。
この辺はるりまの多言語の所にあるのでご参照&わかりづらい部分を見つけたら
教えてください。
http://doc.loveruby.net/refm/api/view/spec/m17n
さて、encoding は $KCODE でなく、それぞれの String が持っています。
ある encoding の文字列を得る方法はいくつかあるのですが、
リテラルは "\u{308B 3073 304}" というように Unicode エスケープを用いて書き、
これを String#encode を用いて変換するのが楽かと思います。
utf8 = "\u{308B 3073 3044}"
eucjp = utf8.encode("EUC-JP")
sjis = utf8.encode("Shift_JIS")
という感じですね。
--
NARUSE, Yui <naruse@airemix.jp>