如何在 Windows cmd/powershell 上使用 Pascal 打印表情符号

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

根据此表,笑脸表情符号的UTF8代码是:

F0 9F 98 81

我尝试将此输出写入控制台,但无济于事:

Program emojii;

{$apptype CONSOLE}

Begin
  WriteLn(#$F0#$9F#$98#$81);
End.

我得到的回应是行话:

😁

我使用的是支持表情符号的Windows Terminal Powershell,如下图所示:

我正在使用 FreePascal:

Free Pascal Compiler version 3.2.2 [2024/02/26] for x86_64
。我使用以下命令构建:

fpc emojii.pas
windows pascal freepascal
2个回答
0
投票

您的 pascal 程序及其结果是正确的。

更改全局 Windows 编码设置或 shell 设置以使用 utf-8 编码。 将 PowerShell 的默认输出编码更改为 UTF-8

如果您的编码不同并且您必须支持该编码,则必须更改您的代码。不幸的是我没有任何 M$ Windows PC。但你的表情符号代码可以写成:

  • UTF-8:$F0 $9F $98 $81(十六进制)
  • UTF-8:&360 &237 &230 &201(八进制)
  • UTF-16:$D83D $DE01(十六进制)
  • UTF-32:$1F601(十六进制)

0
投票

默认情况下,Windows CMD 和 Powershell 使用 代码页 437,其中不包括表情符号。

解决方案是使用

SetConsoleOutputCP(CP_UTF8)
将控制台代码页更改为 UTF8。

我在下面提供了一个使用 UTF8 和 UTF16 代码点的示例。

Program Emoji;

{$APPTYPE CONSOLE}

uses
  Windows;
  
Var
  U8Emoji: String;
  U16Emoji: WideString;
  Converted: String;
Begin
  // 😁 emoji in UTF8 and UTF16
  U8Emoji := Char($F0) + Char($9F) + Char($98) + Char($81);
  U16Emoji := WideChar($D83D) + WideChar($DE01);
  
  // Convert UTF16 to UTF8
  Converted := UTF8Encode(U16Emoji);

  // Set the Windows console codepage to UTF8. By default CMD and Powershell
  // use code page 437: https://en.wikipedia.org/wiki/Code_page_437
  SetConsoleOutputCP(CP_UTF8);  

  // Prints 😁 emoji 
  WriteLn(U8Emoji);
  WriteLn(Converted);
End.
© www.soinside.com 2019 - 2024. All rights reserved.