Согласно этой таблице код 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
@KaiBurghardt нет. Я разобрался и оставил ответ.





Ваша программа на Паскале и ее результат в порядке.
Измените глобальные настройки кодировки Windows или настройки оболочки, чтобы использовать кодировку utf-8. Изменение кодировки вывода PowerShell по умолчанию на UTF-8.
Если ваша кодировка отличается и вы должны поддерживать эту кодировку, вам необходимо изменить свой код. К сожалению, у меня нет компьютера M$ с Windows. Но ваши коды смайликов можно записать так:
Я понял, что Windows использует UCS4, поэтому мне пришлось использовать SetConsoleOutputCP(CP_UTF8).
Извините, я имел в виду cmd, а Powershell по умолчанию использует кодовую страницу 437. Не смог отредактировать предыдущий комментарий.
@BugHunterUK Вы всегда можете удалить свои комментарии и добавить новые — нет необходимости вечно хранить неправильный комментарий. Удалите как публикацию, так и новый правильный комментарий.
«Хватит комментировать», — комментирует спамер комментариев. Довольно иронично, @BugHunterUK.
По умолчанию 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 UTF8 and UTF16 codepoints
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.
Вам понадобится шрифт, поддерживающий смайлы. В Windows 11 по умолчанию используется шрифт Segoe UI Emoji.
Это всего лишь личный опыт, и он может сильно различаться в других средах - нет никакой гарантии, что консоль использует шрифт или несколько шрифтов для отображения всех графем (которые различаются в зависимости от версии Windows), и нет никакой гарантии, что каждый пользователь не установил другое значение по умолчанию. Попробуйте комбинированных персонажей и откройте для себя пределы. Имена собственные: UTF-8 и UTF-16 (с дефисом) и emoji (один i).
Отвечает ли это на ваш вопрос? Диакритические знаки в консольном приложении Pascal?