Дата публикации:
Слово «руна» сегодня употребляется в двух ключевых контекстах:
- Историко-культурный: древние германские или славянские знаки письма (Старший Футарк, Славянские руны).
- Технический: единица кодирования Unicode, обозначаемая в языке Go типом
rune(псевдонимint32).
Статья покажет, как эти смыслы пересекаются и почему важно различать «символ на экране» и «байты в памяти».
Руны в Unicode: таблица символов 16A0–16FF
1.1 Диапазон Runic
Unicode выделил блок U+16A0–U+16FF под рунические символы. В него входят:
- ᚠ U+16A0 (Fehu), скандинавская руна «скот/богатство».
- ᛋ U+16CB (Sigel/Sowilo) — образец из источника SYMBL.
- ᛃ U+16C3 (Jeran) — руна «урожай/год».
| Символ | Unicode | Название | Значение |
|---|---|---|---|
| ᛋ | U+16CB | Long-Branch-Sol S | Солнце, сила. |
| ᛃ | U+16C3 | Jeran J | Год, урожай. |
| ᚢ | U+16A2 | Uruz | Бык, энергия. |
1.2 Как ввести руну на клавиатуре
В Windows:
- Включите NumPad.
- Удерживайте Alt, наберите десятичный код на NumPad. Например,
Alt+5835даст ᛋ.
В macOS/Linux:
- Используйте встроенные Unicode-редакторы или настройте Shift+Ctrl+u + шестнадцатеричный код.
Руна в языке Go: строки, байты и rune
2.1 Почему 1 руна ≠ на экране
На форуме r/golang в 2021 году подчеркивали:
«Одна руна соответствует одному кодовому пункту Unicode, но не обязательно одному видимому графическому символу. Комбинирующие марки и эмодзи-звёздочки могут занимать несколько кодовых пунктов.»
2.2 Практика в Go
package main
import (
"fmt"
"unicode/utf8"
)
func main {
s := "ᛋᛃGo!" // 2 руны + 2 ASCII
fmt.Println(len(s)) // 9 байт
fmt.Println(utf8.RuneCountInString(s)) // 4 руны
} 2.3 Пакет strings и map[rune]int
strings.Mapиstrings.ToLowerработают рунно-ориентированно, поэтому корректно обрабатывают Unicode.- Хеш-таблицы вида
map[rune]intпозволяют считать частоты символов без потери многобайтовых знаков.
Стилизация текста: «Славянские руны для ника»
В онлайн-играх и Discord-псевдонимах популярны «славянские руны», на деле это обычные Unicode-символы блока Runic, а не отдельный шрифт. Пример преобразования:
Обычный ник: Slava
Рунизированный ник: ᛊᛚᚨᚹᚨ
Такой «шрифт» отображается в любом браузере без установки дополнительных файлов, потому что символы берутся из стандартной таблицы Unicode.
Венгерские руны и расширение Unicode
Недавно в Unicode 14.0 добавили блок Old Hungarian (U+10C80–U+10CFF), включая заглавную руну 𐲀 U+10CAA. Это позволяет:
- Использовать венгерские руны в веб-документах.
- Создавать образовательные материалы и шрифтовые наборы без изображений.
Чек-лист разработчика и верстальщика
- Проверяй длину строки через
utf8.RuneCountInString, если в тексте могут быть не-ASCII символы. - Не путай кодовый пункт и графему. Эмодзи 👨👩👧👦 = 7 кодовых пунктов, но 1 графема.
- Для ников и логотипов используй блок Runic и Old Hungarian, но убедись, что целевая аудитория имеет шрифты с этими символами.
- Тестируй в разных ОС: iOS и Android могут отображать руны по-разному.
Слово «руна» в 2026 году — это и исторический артефакт, и технический термин. Unicode даёт нам возможность писать древними знаками без погружения в графические редакторы, а язык Go защищает нас от ошибок при работе с многобайтовыми символами; Главное правило: различать байты, руны и графемы, особенно когда речь идёт о пользовательских именах, паролях или индексации текста.
Быстрая ссылка: вся таблица Unicode доступна на SYMBL ‿ — там же можно скопировать любую руну одним кликом.