如何在Windows Cmd/PowerShell中用Pascal输出Emoji表情
问题:FreePascal输出Emoji到控制台显示乱码
根据对应表格,微笑Emoji的UTF-8编码为F0 9F 98 81。我尝试用以下Pascal代码将其输出到控制台,但显示乱码≡ƒÿü:
Program emojii; {$apptype CONSOLE} Begin WriteLn(#$F0#$9F#$98#$81); End.
我的环境信息:
- 使用支持Emoji的Windows Terminal PowerShell(截图如下)

- FreePascal版本:
Free Pascal Compiler version 3.2.2 [2024/02/26] for x86_64 - 编译命令:
fpc emojii.pas
解决方法
FreePascal默认控制台输出采用系统ANSI编码,而非UTF-8,导致Emoji的UTF-8编码被错误解析为乱码。可通过以下两种方式修复:
方法1:强制设置控制台输出为UTF-8
调用Windows API修改控制台输出代码页为UTF-8(代码页ID 65001),修改后的代码如下:
Program emojii; {$apptype CONSOLE} {$linklib kernel32} function SetConsoleOutputCP(wCodePageID: Word): Boolean; stdcall; external 'kernel32.dll'; Begin SetConsoleOutputCP(65001); WriteLn(#$F0#$9F#$98#$81); End.
方法2:直接使用Unicode码点或UTF-8字符串输出
指定源文件编码为UTF-8后,可直接使用Emoji的Unicode码点或字符输出:
Program emojii; {$apptype CONSOLE} {$codepage UTF8} Begin // 方式一:使用Unicode码点 WriteLn(#$1F601); // 方式二:直接写入Emoji字符(需确保源文件以UTF-8保存) WriteLn('😁'); End.
内容的提问来源于stack exchange,提问作者BugHunterUK
相关产品推荐
相关产品推荐

