2
在Windows上,根據當前配置的代碼頁和控制檯字體解釋PHP命令行腳本的輸出。在西歐,這通常默認爲850和位圖。這意味着,一個腳本寫爲UTF-8(因爲PHP的事實上的標準/ 5.4):在Windows命令提示符下顯示UTF-8輸出
<?php
echo 'Café: 1,25 €' . PHP_EOL;
...通常會這樣看:
C:\tmp>php test.php
Caf├®: 1,25 Ôé¼
的usual workaround是使用*.bat
包裝:
@echo off
chcp 65001 > NUL
php test.php
它不能解決問題的字體,但通常它可以滿足不錯。
我的雙重問題:
是否有可能在PHP中設置代碼頁,所以我們可以省略包裝? (使用程序執行功能運行
chcp
不起作用,因爲它發生在不同的進程中。)這是PHP使用的控制檯庫的限制嗎? (Node.js的腳本總是顯示從UTF-8源,不管本地代碼頁,字體預留正確的輸出。)
要在Windows控制檯中正確支持多字節Unicode,它們必須與低級控制檯API交互。 AFIAK,Java和Node.js已經這樣做了,Python有一個嵌入式模塊來啓用它。如果你沒有直接使用PHP的話,那麼我想你可以用一種支持PHP的UTF-8語言編寫一個包裝器,並正確呈現它。 –