Re: [問題] 請教關於讀檔時多出來的字元 (非換行)
※ 引述《johnnycgi (紅茶不加糖)》之銘言:
: 環境: Windows 7, Ruby 1.9.1, NetBeans 6.8, utf-8 編碼
: 狀況: 弟剛自修 Ruby 第二天 (以前是自修 Perl)
: 今天練習寫了一個讀取檔案並列印輸出到螢幕的 Ruby 如下
: 1. 開啟檔案
: 2. 將檔案以 line 為一單位放到陣列中並同時輸出到螢幕
: 但是使用 p 列印查看結果
: 卻發現陣列中的某行開頭 (通常是第一行或者倒數第二行)
: 多了一個字元 # 有點像 "‧"
: 想了很久還是不知道那個字元到底哪來的 囧
: 不好意思第一篇文就來麻煩大家
有幾件事可以測試,第一個就是 TonyQ 板友提到的 utf-8 bom,
排除這個之後,可以試試看用 binary mode 去讀檔
就是原本寫 File.open filename, 'r' 那邊改成 'rb'
在 windows 下這有差別,差在 ruby 是會把 CRLF 轉成 LF 的,
用 binary mode 可以關閉這樣的轉換。也因此,在 windows 下,
text mode file I/O 的速度非常慢,比 ruby 1.8 慢上數十甚至數百倍。
如果這速度問題很嚴重的話,就一律使用 binary mode, 不要用 text mode.
另一方面,ruby 1.9 有 encoding 的問題,你試試看這個:
p Encoding.default_external
如果是 big-5 的話,那就很可能有問題了。這跟 locale 有關。
這邊作法也很多種,一種是指定 default encoding:
Encoding.default_external = 'utf-8'
另一種是在執行 ruby 時加上個 -U 參數
最後一種則是針對檔案指定 encoding:
File.open(filename, 'r:utf-8::with-bom')
這樣指定你的讀檔用 utf-8, 而且假設有 bom.
除此之外,如果有 Encoding.default_internal 的話,
ruby 在做 I/O 時會自動幫你 transcode.
ruby 1.9 在 encoding 上面下了很多很多的工夫,
好不好用,目前我還看不太出來,但真的很強大就是了。
另外還有 magic comment, 在檔案開頭寫:
# encoding: utf-8
這樣可以指定這個檔案的編碼使用 utf-8
--
生死去来、棚頭傀儡、一線断時、落落磊磊
《花鏡》-世阿弥
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.129.122
推
05/25 12:45, , 1F
05/25 12:45, 1F
→
05/25 12:50, , 2F
05/25 12:50, 2F
推
05/25 12:55, , 3F
05/25 12:55, 3F
→
05/25 12:55, , 4F
05/25 12:55, 4F
→
05/25 12:57, , 5F
05/25 12:57, 5F
→
05/25 13:02, , 6F
05/25 13:02, 6F
→
05/25 13:03, , 7F
05/25 13:03, 7F
→
05/25 13:06, , 8F
05/25 13:06, 8F
→
05/25 13:06, , 9F
05/25 13:06, 9F
→
05/25 15:32, , 10F
05/25 15:32, 10F
推
05/26 00:33, , 11F
05/26 00:33, 11F
→
05/26 00:34, , 12F
05/26 00:34, 12F
→
05/26 00:34, , 13F
05/26 00:34, 13F
→
05/26 02:39, , 14F
05/26 02:39, 14F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):