Umlaut字符不允许通过键盘(codepage 65001,UTF-8)被perl脚本读取

前端之家收集整理的这篇文章主要介绍了Umlaut字符不允许通过键盘(codepage 65001,UTF-8)被perl脚本读取前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请让我先说明这个问题与Perl钻石运算符接受直接键入键盘的输入有关.

如果我讨论了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批处理命令吗?

管道变音符之间似乎有一些基本的不同,直接从键盘输入变音符号.

为什么在键盘上键入一个变音符字符不起作用,而同样的事情可以作为一个管道角色工作得很好吗?

解决方法

尝试将控制台字体更改为“Lucida控制台”

还可以尝试在控制台中运行chcp 65001.此命令将字符设置为UTF-8

如果显示错误 – 将所需字体安装到系统中.

更多细节here

其实问题不属于perl.属于windows终端.尝试在this console 的工作原理.YOu可以记录从输入读取的一些文件二进制数据,并比较两种情况(终端VS cygwin)

原文链接:https://www.f2er.com/Perl/171636.html

猜你在找的Perl相关文章