看板 Perl 關於我們 聯絡資訊
好久沒在 Perl 板發文,最近小弟碰到 Perl 的小問題上來問問大家 環境介紹: - Windows 10 Home Edition,正體中文版 - ActivePerl ver. 5.26.1 - 在 cmd 下操作 以下是小弟寫的 Perl 命令稿,用途是正體中文轉簡體中文: https://pastebin.com/nLsMRJt6 使用以下指令執行此命令稿: $ perl -p -i.bak convertZh.pl path/to/file.txt 噴出以下的錯誤訊息: Wide character in print at convertZh.pl line XXX, <> line XXX. 其實文字還是可以正確轉換,但是會一直噴錯誤訊息 即使用 no warnings; 也關不掉 [Update] 在命令稿尾端加上這行就修好了: $_ = encode_utf8 $_; decode 完當然要再 encode 回去啊 Orz 命令稿留著給大家參考 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.105.245.43 ※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1543732525.A.8D1.html ※ 編輯: Neisseria (112.105.245.43), 12/02/2018 15:18:10
CindyLinz: 讀檔進來的應該就已經是 UTF8 了, 讀檔時要 decode 12/02 16:23
CindyLinz: 不過, decode_json 應該是要讀取 UTF8 的, 所以 12/02 16:23
CindyLinz: 餵給 decode_json 之前應該別動才對 12/02 16:23
CindyLinz: 啊, 抱歉我漏看了前面一排 binmode 設定 12/02 16:24
CindyLinz: STDOUT 已經 binmode utf8 了, 那輸出就別先 encode 了 12/02 16:24
CindyLinz: 不過.. BEGIN 裡面的東西應該會比 binmode 設定還早跑 12/02 16:25
CindyLinz: 因為 binmode 不在 BEGIN 裡面.. @@" 12/02 16:25
CindyLinz: 為什麼要用 BEGIN 啊... @@" 12/02 16:25
CindyLinz: 為了配合 -p 喔? (思 12/02 16:26
CindyLinz: 也許 binmode 該設在 BEGIN 裡... (思 12/02 16:27
可能寫得不好,但至少能動 有機會複習一下 Perl 處理 utf8 的一些議題再來重構吧 Perl 就是這麼實用的東西 (無誤) ※ 編輯: Neisseria (112.105.245.43), 12/02/2018 17:06:12
CindyLinz: 我發現我對 binmode 的操作完全不熟w 12/02 18:07
CindyLinz: 平常都是習慣 byte 進 byte 出的.. XD 12/02 18:07
CindyLinz: 想要怎樣作 char encoding 都內部自己做這樣.. @@ 12/02 18:08
※ 編輯: Neisseria (60.251.46.166), 12/24/2018 16:15:30