如何从 CLI 标准输入中读取非 ASCII 字符
如果我键入CMD,fgets停止等待更多输入,循环运行,直到我按.如果我键入一个“正常”字符,如a-z0-9!?() 它按预期工作。å
ctrl-c
我在Windows 7下的CMD中运行代码,UTF-8作为字符集(),该文件被保存为UTF-8,没有bom。我使用 PHP 5.3.5 (cli)。chcp 65001
<?php
echo "ÅÄÖåäö work here.\n";
while(1)
{
echo '> '. fgets(STDIN);
}
?>
如果我将字符集更改为循环,则当我键入时不会中断,并且它打印“>å”,但“ÅÄÖåäö在这里工作”变为“Ã...“在这里工作!我知道我可以将文件更改为ANSI,但是我不能使用像╠╦╗这样的特殊字符。chcp 1252
å
那么,为什么在我键入 åäö 之后,fgets 会停止等待 userinput 呢?
我该如何解决这个问题?
编辑:
还发现了一个奇怪的虫子。 -> .如果回声中的第一个字符是它打印奇怪的字符,并且最终输出与字符重复。(n = 字符串开头的 åäö 数)。echo "öäåÅÄÖåäö work here! Or?".chr(10);
��äåÅÄÖåäö work here! Or? re! Or?
å/ä/ö
n - 1
例如:和 ->。echo "åäö 1234" -> ??äö 123434
echo åäöåäö 1234
??äöåäö 1234 1234
编辑2(已解决):
问题是,现在我使用(chcp 437)。非常感谢蒂莫西·马滕斯!chcp 65001
chcp 437