如果我在CMD中輸入å
,fgets停止等待更多輸入,並且循環運行,直到我按ctrl-c
。如果我輸入「正常」字符,如a-z0-9!?(),則按預期工作。如何從CLI標準輸入讀取非ASCII字符
我使用UTF-8作爲字符集(chcp 65001
)在Windows 7下運行CMD中的代碼,該文件保存爲UTF-8而不包含bom。我使用PHP 5.3.5(cli)。
<?php
echo "ÅÄÖåäö work here.\n";
while(1)
{
echo '> '. fgets(STDIN);
}
?>
如果我改變字符集來chcp 1252
當我輸入å
並打印「>一個」但是「ÅÄÖåäö在這裏工作」成爲「......一個個」-A¥Ã¤Ã循環不破¶在這裏工作!「。而且我知道我可以將文件更改爲ANSI,但是我不能使用像╠╦╗這樣的特殊字符。
那麼爲什麼fgets在輸入åäö後停止等待userinput?
我該如何解決這個問題?
編輯:
還發現了一個奇怪的錯誤。 echo "öäåÅÄÖåäö work here! Or?".chr(10);
- >��äåÅÄÖåäö work here! Or? re! Or?
。 如果echo中的第一個字符是å/ä/ö
,它會打印奇怪的字符,並輸出結果與n - 1
char ..(n =字符串開頭的數字)。
例如:echo "åäö 1234" -> ??äö 123434
和echo åäöåäö 1234
→??äöåäö 1234 1234
。
EDIT2(解決):
問題是chcp 65001
,現在我用chcp 437
(chcp 437)。 非常感謝Timothy Martens!
關於這個問題的幾個問題:1)當你嘗試在PHP之外的CMD中鍵入和「å」時會發生什麼? 2)UTF-8''與Windows-1252''不一樣是合乎邏輯的,因此產生''。但是如果您嘗試將PHP文件轉換爲Windows-1252,會發生什麼情況? – Qqwy
** 1)**åäö - >「命令不喜歡」,echoåäö - >åäö。所以它工作。兩者都使用'chcp 65001'(UTF-8)和'chcp 1252'。 ** 2)**我在cmd中使用UTF-8,並將其作爲PHP文件的字符集。如果我在PHP文件中使用windows-1252,則不會有任何更改。我認爲這個問題是在Windows/PHP中。當我使用'chcp 1252'時,它適用於ÅÄÖ(即使PHP文件是UTF-8),但後來我不能使用╠╦╗等。 – Sawny
男人,多麼有趣的問題^^。你現在真的有我的注意力。我將嘗試一下自己,我會盡快告訴你。 – Qqwy