如果我讨论了Perl钻石运算符接受来自文件的管道输入或其他文字的输入,那么是的,这将是问题519309 – How do I read Utf-8 with diamond operator的重复.
但是,这不是关于管道或文件数据,而是关于在键盘上直接键入的输入.所以我认为这个问题不是519309的重复.
以下是我的问题的细节:
我正在使用键盘上的变音符号(‘ä’,’ö’,’ü’,…).
我有一个非常简单的perl脚本,从键盘接受一行,然后立即将其重新打印到屏幕上:
如果我使用代码页1252的变音符字符,那么一切都按预期方式工作:
C:\>chcp 1252 & perl -CS -we"print '*** '; $txt = <>; print '--- ',$txt;" Page de codes active: 1252 *** ü --- ü
但是,如果我使用与代码页65001(UTF-8)相同的变音符字符,那么我会收到一个未初始化的警告值,并且不接受变音符号:
C:\>chcp 65001 & perl -CS -we"print '*** '; $txt = <>; print '--- ',$txt;" Page de codes active: 65001 *** ü Use of uninitialized value $txt in print at -e line 1. ---
如果我将变音器管理到我的perl程序中,那么我没有问题:
C:\>chcp 65001 & echo ü | perl -CS -we"print '*** '; $txt = <>; print '--- ',$txt;" Page de codes active : 65001 *** --- ü
为什么使用codepage 65001(UTF-8)得到这个警告?
我正在使用Windows 7 x64,与草莓Perl 5.22.
只是为了记录,如果我使用纯批处理命令(这是我不使用perl),那么我可以使用codepage 65001(UTF-8)成功地键入umlaut字符.
C:\>chcp 65001 & set /p txt=*** & echo --- %txt% Page de codes active: 65001 *** ü --- ü
问题是:为什么perl不能通过键盘65001接受变音符字符,而同样的键盘输入,相同的代码页65001可以作为纯dos批处理命令吗?
管道变音符之间似乎有一些基本的不同,直接从键盘输入变音符号.
为什么在键盘上键入一个变音符字符不起作用,而同样的事情可以作为一个管道角色工作得很好吗?
解决方法
还可以尝试在控制台中运行chcp 65001.此命令将字符设置为UTF-8
更多细节here
其实问题不属于perl.属于windows终端.尝试在this console 的工作原理.YOu可以记录从输入读取的一些文件二进制数据,并比较两种情况(终端VS cygwin)