[問題] 消不掉的錯誤訊息,和 utf8 相關

看板Perl作者 (Neisseria)時間6年前 (2018/12/02 14:35), 6年前編輯推噓2(2011)
留言13則, 1人參與, 6年前最新討論串1/1
好久沒在 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

12/02 16:23, 6年前 , 1F
讀檔進來的應該就已經是 UTF8 了, 讀檔時要 decode
12/02 16:23, 1F

12/02 16:23, 6年前 , 2F
不過, decode_json 應該是要讀取 UTF8 的, 所以
12/02 16:23, 2F

12/02 16:23, 6年前 , 3F
餵給 decode_json 之前應該別動才對
12/02 16:23, 3F

12/02 16:24, 6年前 , 4F
啊, 抱歉我漏看了前面一排 binmode 設定
12/02 16:24, 4F

12/02 16:24, 6年前 , 5F
STDOUT 已經 binmode utf8 了, 那輸出就別先 encode 了
12/02 16:24, 5F

12/02 16:25, 6年前 , 6F
不過.. BEGIN 裡面的東西應該會比 binmode 設定還早跑
12/02 16:25, 6F

12/02 16:25, 6年前 , 7F
因為 binmode 不在 BEGIN 裡面.. @@"
12/02 16:25, 7F

12/02 16:25, 6年前 , 8F
為什麼要用 BEGIN 啊... @@"
12/02 16:25, 8F

12/02 16:26, 6年前 , 9F
為了配合 -p 喔? (思
12/02 16:26, 9F

12/02 16:27, 6年前 , 10F
也許 binmode 該設在 BEGIN 裡... (思
12/02 16:27, 10F
可能寫得不好,但至少能動 有機會複習一下 Perl 處理 utf8 的一些議題再來重構吧 Perl 就是這麼實用的東西 (無誤) ※ 編輯: Neisseria (112.105.245.43), 12/02/2018 17:06:12

12/02 18:07, 6年前 , 11F
我發現我對 binmode 的操作完全不熟w
12/02 18:07, 11F

12/02 18:07, 6年前 , 12F
平常都是習慣 byte 進 byte 出的.. XD
12/02 18:07, 12F

12/02 18:08, 6年前 , 13F
想要怎樣作 char encoding 都內部自己做這樣.. @@
12/02 18:08, 13F
※ 編輯: Neisseria (60.251.46.166), 12/24/2018 16:15:30
文章代碼(AID): #1S0tqjZH (Perl)
文章代碼(AID): #1S0tqjZH (Perl)