看板 Ruby 關於我們 聯絡資訊
環境: Ruby 1.8.7 狀況: 輸入:一個 Big5 的純文字檔 input.txt 裏面的內容只有四個字: 東吳大學 操作:開檔,讀內容,判斷它是否 match /^[\d\w]{8}$/ 預期結果: nil 實際結果:因 $KCODE 而異 (!?) 在 $KCODE='u' 的時候會 match 到 \d\w 不是只會 match 到英文字母和數字嗎? 想請問大家為甚麼會這樣 :( 感謝 附錄: 程式: #!/usr/bin/ruby -w $KCODE='u' # 這一行註解與否會影響到正規表示法的 match File.open("input.txt", "r").each_line do |l| if l.chomp.match(/^[\d\w]{8}$/) puts "matched" end end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.166.137 ※ 編輯: ducksteven 來自: 140.122.166.137 (04/15 03:35)
iamweep:你的程式把東吳大學的binary當成UTF-8來解讀而match \w 04/15 07:23
godfat:你 $KCODE 設 u 然後讀 big5 不是在欺騙 ruby 嗎 @@ 04/15 11:35
ducksteven:這是節錄 原本的程式要同時處理 big5 和 utf8 04/15 13:09
godfat:用 ruby 1.8 的話,這樣只能用 byte sequence 來做 04/15 13:41
ducksteven::o 意思是我應該把 big5 和 utf8 分開處理囉? 04/15 22:02
godfat:當然,而且\w是會match中文字的,你要[A-Za-z]才是英文字母 04/15 22:41
godfat:要統一處理就轉個編碼,或是用 1.9.1 吧 04/15 22:41
ducksteven:嗯嗯 謝謝 :) 04/15 23:43
iamweep:統統轉成UTF-8來做,用iconv 04/16 02:00
ducksteven:這個有技術上的困難 因為它有些字是 ...造字... XDD 04/16 03:01
godfat:如果是 big5-hkscs, iconv 支援,如 UAO, 海字集,要另找 04/16 10:50
godfat:如果是完全自己的造字... 只能自己寫了 XD 04/16 10:50
ducksteven:是啊 就是完全造字...XD 04/16 18:02
Schelfaniel:完全自己造字有時連 iconv 都會轉失敗,超慘的 04/16 20:38