Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
.NET Core 2.1

Подгрузка и работа с пользовательскими шрифтами

14.07.2024, 14:18. Показов 1276. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, всем доброго времени суток.

У меня проект на ASP.Net Core 2.1 MVC, включающий обработку текстовых данных из пользовательских файлов.
Более точно,
пользователь со своего локального компьютера подгружает в мой проект, расположенный на сервере,
файлы с расширением txt с пользовательской кодировкой. Это шрифт True Type, церковно-славянский (современный
кириллический + "старые" буквы типа "ук", "юс малый", знак титла, выносные). Вообщем, специально разработанный для публикации древнерусских текстов.

Загрузку файлов на сервер мной реализована через файл (uploadedFile) типа IFormFile на контроллере,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
  //...
string s = "";
          
            using (var reader = new StreamReader(uploadedFile.OpenReadStream(), System.Text.Encoding.Default))
            {
                        while (reader.Peek() >= 0)
                        {
                            s = reader.ReadLine();
 
                      //обрабока строки, разбиение на отдельные слова и их запись в SQL SERVER
                          }
                         reader.Close();
            }
также на стороне сервера производится их чтение в базу SQL Server через стандарт Repository.cs

Проблема в следующем. Кириллические символы отражаются корректно, а остальные (примеры я их приводил выше) - в виде точки по центру.


Соответственно, необходимо как-то подгружать ПОЛЬЗОВАТЕЛЬСКИЙ ФОНТ и, может, что-то еще делать.


На форумах и metanit.com я нашел информацию про подгрузку фонтов на стороне клиента

https://stackoverflow.com/ques... pplication


https://metanit.com/sharp/maui/4.3.php

Я в этом полный новичок, но смутно понимаю, что мне это не подходит.
Первое - поскольку у меня обработка проходит на стороне сервера, а не клиента.
Второе - MAUI это особое кросс-платформенное приложение, у меня же Visual Studio 2019.

Буду благодарен совету что делать в этой ситуации. Слабо представляю даже направление, в какую сторону двигаться.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2024, 14:18
Ответы с готовыми решениями:

Работа с пользовательскими типами
У меня есть 2 функции импортируемые из с++, одна из них принимает мой тип InitInfo, как параметр, а другая должна возвращать её , так вот:...

Работа с пользовательскими методами
Необходимо описать два метода, которые реализуют один и тот же алгоритм, описанный в задании. Первый метод для возврата результата должен...

работа с пользовательскими функциями
Здравствуйте, помогите исправить ошибку:( Задание: Даны две матрицы. Создать свои пользовательские функции. Первая должна инициировать...

14
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
14.07.2024, 15:03
Цитата Сообщение от SSergey73 Посмотреть сообщение
Соответственно, необходимо как-то подгружать ПОЛЬЗОВАТЕЛЬСКИЙ ФОНТ и, может, что-то еще делать.
Зачем его подгружать? Почему бы на разместить на севере нужный шрифт? Если шрифтов несколько, то просто дайте пользователю возможность переключаться между ними путем генерации нужного CSS.
0
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
14.07.2024, 21:22  [ТС]
OwenGlendower, здравствуйте.

Спасибо за ответ. Решил пойти по Вашему совету. Если что-то не так сделал - поправьте, пожалуйста.

Пока без переключений. Через внешний css файл.

Создал у себя в проекте в (\wwwroot) подпапку \Fonts\ и поместил туда свой

Добавлено через 12 минут
OwenGlendower, здравствуйте.

Спасибо за ответ. Решил пойти по Вашему совету. Если что-то не так сделал - поправьте, пожалуйста.

Пока без переключений шрифтов. Один шрифт.

Через внешний css файл.

1) Создал у себя в проекте в (\wwwroot) подпапку \Fonts\ и поместил туда свой шрифт FlaviusUniversal.ttf
2) создал в \wwwroot\css\ файл стиля flaviusuniversal.css со следующим текстом:
CSS
1
2
3
4
5
6
7
8
9
10
11
<style type="text/css">@font-face {
    font-family: "FlaviusUniversal";
    font-weight: 400;
    src: "~/Fonts/FlaviusUniversal.ttf";
}
 
.Text {
    font-family: "FlaviusUniversal";
}
 
</style>
3) в мастер-странице проекта _Layout.cshtml
вставил 8-ю строчку (привожу полный ее текст):
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"]</title>
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    [B]<link rel="stylesheet" href="~/css/flaviusuniversal.css" />[/B]
</head>
<body>
    <header>
        <nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom mb-3">
            <div class="container-fluid">
                <a class="navbar-brand" href="~/">Домой</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse" id="navbarNav">
                    <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-controller="Home" asp-action="Index">В начало</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial">
                </div>
            </div>
        </nav>
    </header>
    <div class="container">
        <main role="main" class="pb-3">
            @RenderBody()
        </main>
    </div>
    <footer class="border-top text-muted">
        <div class="container">
            &copy; @DateTime.Now.Year - Мой сайт <a href="https://github.com/Umrikhin" target="_blank">https://github.com/Umrikhin</a>
        </div>
    </footer>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>


Изменений никаких. Как писало странные знаки в записи таблицы SQLServer, так и пишет.

Может, это из-за того, что css действует только на отображение html страниц?
Хотя там тоже никаких изменений не произошо.

Пишу так подробно, поскольку совсем не являюсь специалистом в css.

Или я неправильно понял Вашу мысль?

 Комментарий модератора 
Используйте кнопки языков программирования в редакторе сообщений для выделения кода вместо общего тега CODE. Для многих языков есть свои теги. Например, CSS, HTML, CSHARP.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
14.07.2024, 21:55
Цитата Сообщение от SSergey73 Посмотреть сообщение
Может, это из-за того, что css действует только на отображение html страниц?
Ну конечно CSS действует только на отображение html страниц. На БД он никак не влияет.

Цитата Сообщение от SSergey73 Посмотреть сообщение
Как писало странные знаки в записи таблицы SQLServer, так и пишет.
Тут разные причины могут быть. Проверьте по очереди:

1) Возможно кодировка входного файла не та что вы ожидаете. Поставьте точку останова на коде чтения из файла и убедитесь что текст корректно читается.

2) Возможно колонка(и) в БД куда вы записываете данные не поддерживают Unicode. Убедитесь что это nvarchar или ntext колонки.

3) Возможно в коде записи в БД есть ошибки. Что вы используете? EF Core?

Цитата Сообщение от SSergey73 Посмотреть сообщение
Пишу так подробно, поскольку совсем не являюсь специалистом в css.
Заметно.

1) В CSS файле не нужно указывать тег style. Это же не HTML.

2) В CSS файлах нельзя использовать ~/. Эти символы понятны только ASP.NET Core. CSS применяется браузером. Используйте обычные относительные или абсолютные пути.

3) Вы создали правило .Text, а где его применение?
0
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
15.07.2024, 15:37  [ТС]
OwenGlendower, здравствуйте.

Спасибо Вам за ответ.
Отвечаю по пунктам:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
1) Возможно кодировка входного файла не та что вы ожидаете. Поставьте точку останова на коде чтения из файла и убедитесь что текст корректно читается.
Поставил точки останова. Читается при отладке уже некорректно.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
2) Возможно колонка(и) в БД куда вы записываете данные не поддерживают Unicode. Убедитесь что это nvarchar или ntext колонки.
nvarchar

Цитата Сообщение от OwenGlendower Посмотреть сообщение
3) Возможно в коде записи в БД есть ошибки. Что вы используете? EF Core?
EF Core


Спасибо Вам за консультации по css.

 Комментарий модератора 
Используйте тег QUOTE при цитировании. Иначе может быть тяжело понять где ваш текст, а где чужой.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
15.07.2024, 16:30
Цитата Сообщение от SSergey73 Посмотреть сообщение
Поставил точки останова. Читается при отладке уже некорректно.
Какая кодировка у входного файла?
0
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
15.07.2024, 23:20  [ТС]
UTF-8
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
15.07.2024, 23:30
SSergey73, думаю вы ошибаетесь т.к. в коде используется Encoding.Default. В .NET Core это всегда UTF-8. И значит текст должен читаться корректно, но, по вашим словам, читается некорректно. Значит кодировка файла не UTF-8.
0
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
15.07.2024, 23:43  [ТС]




OwenGlendower,

во вложении две картинки: одна - что во входном файле на церковнославянском,
вторая - то, какие отдеьные слова выделились и как загрузились в мою SQL таблицу (колонка вариант)

Входной файл типа txt, при сохранении выбирал Кодировка - UTF-8

Наверное, кривые шрифты у филологов. Оказывается, при наборе текста они переключаются между двумя шрифтами (уже
упомянутым FlaviusUniversal) и еще одним, тоже пользоватеьским. Последний у них используется для печатания
выносных букв (то есть тех, которые пишутся над чертой).

Извините за такой подробный рассказ.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
16.07.2024, 00:15
SSergey73, можете загрузить входной текстовый файл на форум?
0
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
16.07.2024, 12:13  [ТС]
Соф-1262_10.txt

Да, конечно.
0
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
16.07.2024, 12:20  [ТС]
Fonts.rar+ шрифты
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
16.07.2024, 23:15
SSergey73, попробовал вывести текст из вашего файла используя шрифт FlaviusUniversal.ttf. Насколько я вижу всё в порядке:

Значит с кодировкой и шрифтом всё в порядке. При этом без шрифта часть букв выводятся в виде "странных знаков" как у вас в БД. Думаю что это нормальное поведение. Просто без правильного шрифта система не может их корректно отобразить. Значит вам всего лишь нужно вывести текст из БД на страницу внутри html элемента с шрифтом который поддерживает церковнославянские символы.

Условный пример (исходя из вашего CSS в сообщении #3):
HTML5
1
<div class="Text">@Model.Text</div>
0
0 / 0 / 0
Регистрация: 18.01.2024
Сообщений: 24
20.07.2024, 21:44  [ТС]
OwenGlendower , здравствуйте.

Спасибо за Ваш ответ.

Сделал c css все как сказали.

К сожалению, выводит в html некорректно


На рисунке приводится разбиение по словам ( с помощью стандартного оператора s.Split (' '))
Как видно, слово где есть "особая" буква, он его разбивает на два слова.
Не знаю, с этим делать.

Пока набиваю все в Times New Roman (в нем есть почти все нужные буквы). Некрасиво конечно, но, по крайней мере,
появился хоть какой-то результат:


На "-1" обращать внимание не надо, это служебный символ - означает вставку на этом месте.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18240 / 14154 / 5366
Регистрация: 17.03.2014
Сообщений: 28,841
Записей в блоге: 1
20.07.2024, 22:07
Цитата Сообщение от SSergey73 Посмотреть сообщение
Как видно, слово где есть "особая" буква, он его разбивает на два слова.
Нет, не видно. У вас в файле многострочный текст с переносами отдельных слов. С учетом переносов это 11 слов. На вашем первом скриншоте как раз 11=12-1 слов. Думаю вам следует учесть то что слово может иметь перенос на следующую строку и склеивать такие слова.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.07.2024, 22:07
Помогаю со студенческими работами здесь

Работа с пользовательскими функциями на языке С++
Здравствуйте! Написал несложную программу на С++. В данный момент времени попытался разбить ее на функции, но она неправильно работает -...

Работа с пользовательскими методами класса
Создать метод, который проверяет корректность введенной даты; формат даты передается в строковой переменной , где d - день, m - месяц, y -...

Работа с пользовательскими событиями: приход товара
Общие требования к заданию Необходимо выполнить следующие операции: 1)описать свойства (не менее 5) и методы (не менее 2)...

IDE Thonny работа с пользовательскими функциями
Доброй ночи! Пользуюсь для учебы IDE Thonny, хотел бы узнать, как можно сворачивать блок пользовательской функции, чтобы не занимал...

Основы SYCL: работа с пользовательскими типами данных
Добрый день, уважаемые форумчане. В конце прошлого года компания Intel выпустила пакет для разработки высокопроизводительных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru