作者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/cn.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