加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 22:00:24 所属栏目:大数据 来源:网络整理
导读:请让我先说明这个问题与Perl钻石运算符接受直接键入键盘的输入有关. 如果我讨论了Perl钻石运算符接受来自文件的管道输入或其他文字的输入,那么是的,这将是问题519309 – How do I read Utf-8 with diamond operator的重复. 但是,这不是关于管道或文件数据,而
请让我先说明这个问题与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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读