请让我首先说明这个问题与perl钻石操作员接受直接键入键盘的输入有关.
如果我谈到perl钻石操作员接受输入已经被管道传输或来自文件中的文本,那么是的,这将是问题519309的重复 - 如何使用钻石操作员阅读Utf-8.
但是,这不是关于管道或文件数据,而是关于直接键入键盘的输入.因此,我认为,这个问题不是519309的重复.
以下是我的问题的详细信息:
我正在尝试在键盘上使用变音字符('ä','ö','ü',...).
我有一个非常简单的perl脚本,它接受来自键盘的一行,然后立即将其再次输出到屏幕:
如果我在代码页1252上使用变音字符,那么一切都按预期工作:
C:\>chcp 1252 & perl -CS -we"print '*** '; $txt = <>; print '--- ', $txt;"
Page de codes active : 1252
*** ü
--- ü
Run Code Online (Sandbox Code Playgroud)
但是,如果我在代码页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.
---
Run Code Online (Sandbox Code Playgroud)
如果我将变音符号输入我的perl程序,那么我没有问题:
C:\>chcp 65001 & echo ü | perl -CS -we"print '*** '; $txt = <>; print '--- ', $txt;"
Page de codes active : 65001
*** --- ü
Run Code Online (Sandbox Code Playgroud)
为什么我会在代码页65001(UTF-8)上收到此警告?
我使用的是Windows 7 x64,带有Strawberry Perl 5.22.
只是为了记录,如果我使用纯批处理命令(即我不使用perl),那么我可以使用代码页65001(UTF-8)成功键入变音字符.
C:\>chcp 65001 & set /p txt=*** & echo --- %txt%
Page de codes active : 65001
*** ü
--- ü
Run Code Online (Sandbox Code Playgroud)
真正的问题是:为什么perl不能通过键盘和代码页65001接受变音字符,而相同的键盘输入,相同的代码页65001,作为纯dos批处理命令工作正常?
在管道变音字符和直接从键盘输入变音字符之间似乎存在根本不同的东西.
为什么在键盘上输入变音符号字符不起作用,而同样的东西作为管道字符工作得很好?
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |