【发布时间】:2014-04-16 10:42:46
【问题描述】:
在 Windows 上,PHP 命令行脚本的输出根据当前配置的代码页和控制台字体进行解释。在西欧,这通常默认为850 和位图。这意味着编写为 UTF-8(自 PHP/5.4 以来的事实标准)的脚本:
<?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 并正确呈现它。
标签: php windows command-line utf-8