根据此表,笑脸表情符号的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 编码设置或 shell 设置以使用 utf-8 编码。 将 PowerShell 的默认输出编码更改为 UTF-8。
如果您的编码不同并且您必须支持该编码,则必须更改您的代码。不幸的是我没有任何 M$ Windows PC。但你的表情符号代码可以写成:
默认情况下,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.