作者Neisseria (Neisseria)
看板Perl
標題[問題] 消不掉的錯誤訊息,和 utf8 相關
時間Sun Dec 2 14:35:21 2018
好久沒在 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://webptt.com/m.aspx?n=bbs/Perl/M.1543732525.A.8D1.html
※ 編輯: Neisseria (112.105.245.43), 12/02/2018 15:18:10
1F:推 CindyLinz: 讀檔進來的應該就已經是 UTF8 了, 讀檔時要 decode 12/02 16:23
2F:→ CindyLinz: 不過, decode_json 應該是要讀取 UTF8 的, 所以 12/02 16:23
3F:→ CindyLinz: 餵給 decode_json 之前應該別動才對 12/02 16:23
4F:→ CindyLinz: 啊, 抱歉我漏看了前面一排 binmode 設定 12/02 16:24
5F:→ CindyLinz: STDOUT 已經 binmode utf8 了, 那輸出就別先 encode 了 12/02 16:24
6F:→ CindyLinz: 不過.. BEGIN 裡面的東西應該會比 binmode 設定還早跑 12/02 16:25
7F:→ CindyLinz: 因為 binmode 不在 BEGIN 裡面.. @@" 12/02 16:25
8F:→ CindyLinz: 為什麼要用 BEGIN 啊... @@" 12/02 16:25
9F:→ CindyLinz: 為了配合 -p 喔? (思 12/02 16:26
10F:→ CindyLinz: 也許 binmode 該設在 BEGIN 裡... (思 12/02 16:27
可能寫得不好,但至少能動
有機會複習一下 Perl 處理 utf8 的一些議題再來重構吧
Perl 就是這麼實用的東西 (無誤)
※ 編輯: Neisseria (112.105.245.43), 12/02/2018 17:06:12
11F:推 CindyLinz: 我發現我對 binmode 的操作完全不熟w 12/02 18:07
12F:→ CindyLinz: 平常都是習慣 byte 進 byte 出的.. XD 12/02 18:07
13F:→ CindyLinz: 想要怎樣作 char encoding 都內部自己做這樣.. @@ 12/02 18:08
※ 編輯: Neisseria (60.251.46.166), 12/24/2018 16:15:30