TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.74K subscribers
Post #3284 1.43K
День 2742. #TipsAndTricks
Получаем Название Символа Unicode из Руны
Я уже писал в обзоре новинок .NET 11, что в C# добавлена поддержка рун. Однако, если у вас есть руна и вы хотите получить название этого Unicode-символа (например, GRINNING FACE для 😀), то в .NET на сегодняшний день нет встроенного API.

Библиотека ICU (International Components for Unicode) предоставляет функцию u_charName, которая возвращает название Unicode-символа. Обычно, начиная с .NET 5, вам не требуется обращаться к ней напрямую, т.к. .NET нативно её поддерживает. Но поддержка названий Unicode-символов пока не добавлена, поэтому придётся вызвать её напрямую:
using System;
using System.Runtime.InteropServices;
using System.Text;

public static class IcuNative
{
private const string IcuLib = "icuuc";

private enum UCharNameChoice
{
U_UNICODE_CHAR_NAME = 0,
}

private enum UErrorCode
{
U_ZERO_ERROR = 0,
}

[DllImport(IcuLib, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "u_charName")]
private static extern int u_charName(
int codepoint,
UCharNameChoice nameChoice,
byte[] buffer,
int bufferLength,
ref UErrorCode errorCode);

public static string GetCharName(Rune rune)
{
var buffer = new byte[128];
var error = UErrorCode.U_ZERO_ERROR;

int length = u_charName(
rune.Value,
UCharNameChoice.U_UNICODE_CHAR_NAME,
buffer,
buffer.Length,
ref error);

if (error != UErrorCode.U_ZERO_ERROR)
throw new InvalidOperationException(
$"Ошибка ICU: {error}");

return Encoding.ASCII
.GetString(buffer, 0, length);
}
}


Использование:
var rune = new Rune(0x1F600); // 😀
Console.WriteLine(IcuNative.GetCharName(rune));
// GRINNING FACE

var rune = new Rune(0x1F600); // 🌍
Console.WriteLine(IcuNative.GetCharName(rune));
// EARTH GLOBE EUROPE-AFRICA


Источник:
https://www.meziantou.net/get-a-unicode-character-name-from-a-rune-in-dotnet.htm
  • 👍 2
More from @netdeveloperdiary
  1. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  2. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  3. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  4. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  5. Sep 22, 2026День 2792. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  6. Sep 21, 2026🔍Тестовое собеседование с Senior C# разработчиком уже завтра 22 сентября(уже завтра!) в 1…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →