[問題] 關於 Big5 與 regexp

看板Ruby作者 (啞子七号)時間16年前 (2009/04/15 03:32), 編輯推噓0(0014)
留言14則, 4人參與, 最新討論串1/1
環境: 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)

04/15 07:23, , 1F
你的程式把東吳大學的binary當成UTF-8來解讀而match \w
04/15 07:23, 1F

04/15 11:35, , 2F
你 $KCODE 設 u 然後讀 big5 不是在欺騙 ruby 嗎 @@
04/15 11:35, 2F

04/15 13:09, , 3F
這是節錄 原本的程式要同時處理 big5 和 utf8
04/15 13:09, 3F

04/15 13:41, , 4F
用 ruby 1.8 的話,這樣只能用 byte sequence 來做
04/15 13:41, 4F

04/15 22:02, , 5F
:o 意思是我應該把 big5 和 utf8 分開處理囉?
04/15 22:02, 5F

04/15 22:41, , 6F
當然,而且\w是會match中文字的,你要[A-Za-z]才是英文字母
04/15 22:41, 6F

04/15 22:41, , 7F
要統一處理就轉個編碼,或是用 1.9.1 吧
04/15 22:41, 7F

04/15 23:43, , 8F
嗯嗯 謝謝 :)
04/15 23:43, 8F

04/16 02:00, , 9F
統統轉成UTF-8來做,用iconv
04/16 02:00, 9F

04/16 03:01, , 10F
這個有技術上的困難 因為它有些字是 ...造字... XDD
04/16 03:01, 10F

04/16 10:50, , 11F
如果是 big5-hkscs, iconv 支援,如 UAO, 海字集,要另找
04/16 10:50, 11F

04/16 10:50, , 12F
如果是完全自己的造字... 只能自己寫了 XD
04/16 10:50, 12F

04/16 18:02, , 13F
是啊 就是完全造字...XD
04/16 18:02, 13F

04/16 20:38, , 14F
完全自己造字有時連 iconv 都會轉失敗,超慘的
04/16 20:38, 14F
文章代碼(AID): #19vEJ3fL (Ruby)