cmd - 使用 PHP 在 CLI/shell/终端中打印表情符号/外来字符

标签 cmd character-encoding emoji windows-terminal php-7.0

当我在终端中运行包含 <?php echo "🚀पीएचपी"; 的脚本时,它显示垃圾字符而不是表情符号和外文文本。

具体来说,它显示 ≡ƒÜÇαñ¬αÑÇαñÅαñÜαñ¬αÑÇ .

但是,运行包含 console.log("🚀पीएचपी") 的 Node.js 脚本正确地将表情符号和外文显示为 🚀पीएचपी .

如何在使用 PHP 时正确回显/打印表情符号和外文文本,以便它们按预期在 CLI 中显示?

关于如何解决此问题并让 PHP 在终端中正确显示表情符号和 unicode 文本有什么建议吗?

此场景已使用 Windows 终端 (Powershell 7)、cmd 和 GitBash(MINGW64) 终端进行了测试

正在运行chcp在我的 Windows 终端中返回 65001(即 utf-8)。因此终端本身已正确配置 UTF-8。引用chcp : https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers?redirectedfrom=MSDN

最小可重现示例:

  1. 运行chcp 65001在 Windows 终端/cmd 中。
  2. 运行chcp再次确保它返回 Active code page: 65001 .
  3. 运行下面的 php 脚本(确保在 php.ini 中启用 extension=mbstring):
<?php

$utf8_string = "🚀पीएचपी";
$detected_encoding = mb_detect_encoding($utf8_string);

echo "Detected encoding[$utf8_string]: " . $detected_encoding;
  • 我仍然看到这个显示:
  • Detected encoding[≡ƒÜÇαñ¬αÑÇαñÅαñÜαñ¬αÑÇ]: UTF-8
    

    附录: 我正在使用 PHP7.0 。它适用于 PHP 8.2,但不适用于 PHP 7.0

    最佳答案

    PHP 7.1 引入了许多与 Windows 上的代码页相关的更改(有关详细信息,请参阅 here)。 其中一项更改是调用 php_win32_cp_cli_setup()在 CLI SAPI 中。 该函数最终调用 SetConsoleOutputCP() Win32 API 设置与控制台关联的代码页。

    代码页根据default_charset PHP 选项设置。默认情况下,该选项的值为 UTF-8, 因此代码页设置为 65001:

    C:\Users\Olivier>C:\php\php.exe -r "echo sapi_windows_cp_get();"
    65001
    

    如果我在 php.ini 中设置 default_charset = "windows-1252",我会得到:

    C:\Users\Olivier>C:\php\php.exe -r "echo sapi_windows_cp_get();"
    1252
    

    您在评论中提到您正在使用 PHP 7.0。对于该版本,CLI 使用默认 OEM 运行 代码页,这会导致您的编码不匹配。

    关于cmd - 使用 PHP 在 CLI/shell/终端中打印表情符号/外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76819401/

    相关文章:

    ms-access - UTF-8 编码的 MS Access 表

    c++ - Unicode 字符 Visual C++

    c++ - 如何在 C++ 中将字符串从一个字符集转换为另一个字符集?

    python-2.7 - 将python表情符号打印为unicode字符串

    java - 检查是否是表情符号字符

    MySQL 处理 utf8mb4_unicode_ci 的 unicode 文本

    batch-file - 以不同用户身份运行cmd并执行命令行的批处理文件

    Windows 命令行 : why environment variable is not available after &

    cmd - 如何使用 putty 从命令行下载文件/zip?

    cmd - 自动生成 makecert 密码