为什么Windows控制台会静默剥离所有非ASCII输入字符?以及如何解决/解决它?

问题描述 投票:0回答:1

我使用包含以下内容的start.bat启动我的PHP CLI脚本:

@echo off
chcp 65001 > NUL
php engine.php

“ chcp 65001”部分专门使其使用Unicode(但未使用)。

engine.php包含:

<?php

    $input = fgets(STDIN);
    var_dump($input);

当我运行start.bat时,它将打开一个正在运行engine.php的控制台:

åäölöäå
string(9) "   l
"
Press any key to continue . . .

如您所见,它将去除除“ l”之外的所有字符。这意味着我依赖我粘贴文本作为输入中断的脚本,这完全破坏了我的工作流程。我需要能够将复制的所有字符串粘贴到脚本中,并使其完美保存。

为什么会这样?我们该如何解决?

[请不要告诉我使用PowerShell。这是一个血腥的破碎烂摊子,即使我强迫它运行,它的行为也似乎相同(我再也不想再处理了)。另外,我还没有Windows终端,因此我至少在经典控制台上呆了几年。

php windows unicode windows-10 windows-console
1个回答
0
投票

在Windows 10和PHP 7.2中有相同的问题。

解决了切换到readline()功能而不是fgets()的问题。

chcp 65001设置的Unicode代码页结合,现在收到的输入是有效的UTF8。无需转换。

https://www.php.net/manual/en/function.readline.php

© www.soinside.com 2019 - 2024. All rights reserved.