Код[ировка] Шрёдингера и Wine
От: cppguard  
Дата: 05.03.23 07:10
Оценка:
Запускаю приложение через Wine и вижу



1. Как такое вообще возможно?
2. Как это починить?

Половина слов в UTF8, половина в какой-нибудь UTF16/32 или вообще cp1251? Мне казалось, что если данные закодированы в unicode, то либо строка является допустимой, либо недопустимой, и тогда от рендера шрифтов должно прийти сообщение об ошибке (либо рендер заменит символы на знаки вопросов как в Java).
Re: Код[ировка] Шрёдингера и Wine
От: rudzuk  
Дата: 05.03.23 09:53
Оценка:
Здравствуйте, cppguard, Вы писали:

c> Запускаю приложение через Wine и вижу


c> http://files.rsdn.org/125804/Screenshot%20from%202023-03-05%2017-04-44.png


c> 1. Как такое вообще возможно?


У шрифта не указан/указан неправильный чарсет.

c> 2. Как это починить?


Отпинать автора.
avalon/3.0.2
Re[2]: Код[ировка] Шрёдингера и Wine
От: cppguard  
Дата: 06.03.23 01:26
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>У шрифта не указан/указан неправильный чарсет.


А почему половина слов нормально отображается? Сейчас уже решил проблему добавлением LC_ALL=ru_RU.UTF-8.
Re[3]: Код[ировка] Шрёдингера и Wine
От: Quebecois Канада https://www.canada.ca/
Дата: 06.03.23 02:43
Оценка: 4 (1) +1 :)
Здравствуйте, cppguard, Вы писали:

C>А почему половина слов нормально отображается? Сейчас уже решил проблему добавлением LC_ALL=ru_RU.UTF-8.

Потому что одна половина идет через DrawTextA(), а вторая — через DrawTextW().
Re[2]: Код[ировка] Шрёдингера и Wine
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.05.23 13:06
Оценка:
Здравствуйте, rudzuk, Вы писали:


R>У шрифта не указан/указан неправильный чарсет.


Вот кстати, а нафига оно нужно в мире юникода? Или это пережитки тяжелого Ansi прошлого?
Маньяк Робокряк колесит по городу
Re[3]: Код[ировка] Шрёдингера и Wine
От: rudzuk  
Дата: 24.05.23 14:58
Оценка:
Здравствуйте, Marty, Вы писали:

M> R>У шрифта не указан/указан неправильный чарсет.


M> Вот кстати, а нафига оно нужно в мире юникода? Или это пережитки тяжелого Ansi прошлого?


Если я правильно помню, это нужно для того, чтобы система могла правильно выбрать физический файл шрифта с нужными глифами.
avalon/3.0.2
Re[4]: Код[ировка] Шрёдингера и Wine
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.05.23 16:48
Оценка:
Здравствуйте, rudzuk, Вы писали:

M>> R>У шрифта не указан/указан неправильный чарсет.


M>> Вот кстати, а нафига оно нужно в мире юникода? Или это пережитки тяжелого Ansi прошлого?


R>Если я правильно помню, это нужно для того, чтобы система могла правильно выбрать физический файл шрифта с нужными глифами.


Ну если у меня юникодные строки на кириллице, то пусть фонт маппер сам и думает, как ему русские буквы отображать, почему я ещё должен при создании шрифта чарсет задавать? Тем более, что я им собираюсь не только кириллицу выводить. Или, задача выводить кириллицу/латинницу/арабицу/etc так до сих пор и лежит на программисте? И для каждой буквы надо самому решать, какой шрифт использовать для её отображения?
Маньяк Робокряк колесит по городу
Re: Код[ировка] Шрёдингера и Wine
От: Muxa  
Дата: 25.05.23 08:30
Оценка:
Это у тебя ещё приемлемо выглядит.
Я однажды запустил приложение налоговой на английской винде, и увидел три варианта отображения русского текста на одной форме: нормальные символы, кракозябры, вопросики.
Re[5]: Код[ировка] Шрёдингера и Wine
От: rudzuk  
Дата: 25.05.23 09:04
Оценка:
Здравствуйте, Marty, Вы писали:

M> R>Если я правильно помню, это нужно для того, чтобы система могла правильно выбрать физический файл шрифта с нужными глифами.


M> Ну если у меня юникодные строки на кириллице, то пусть фонт маппер сам и думает, как ему русские буквы отображать, почему я ещё должен при создании шрифта чарсет задавать?


Потому что связывание логического шрифта с физическим происходит в момент назначения шрифта на контексте устройства. И именно в этот момент система должна иметь достаточно информации для выбора правильного физического шрифта.

M> Тем более, что я им собираюсь не только кириллицу выводить. Или, задача выводить кириллицу/латинницу/арабицу/etc так до сих пор и лежит на программисте? И для каждой буквы надо самому решать, какой шрифт использовать для её отображения?


Сейчас все несколько проще т.к. шрифты поддерживают чуть не весь юникод (по крайней мере стремяться). Но вообще, шрифты могут иметь ограниченный набор глифов и если использовать неправильный чарсет и при этом указать гарнитуру именно такого шрифта, то увидишь только квадратики.
avalon/3.0.2
Re[6]: Код[ировка] Шрёдингера и Wine
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 25.05.23 09:59
Оценка:
Здравствуйте, rudzuk, Вы писали:

M>> Ну если у меня юникодные строки на кириллице, то пусть фонт маппер сам и думает, как ему русские буквы отображать, почему я ещё должен при создании шрифта чарсет задавать?


R>Потому что связывание логического шрифта с физическим происходит в момент назначения шрифта на контексте устройства. И именно в этот момент система должна иметь достаточно информации для выбора правильного физического шрифта.


Вроде бы фонт маппер для каждого символа ищет глиф или как оно зовется. Читал что-то такое. Но могу ошибаться

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


Получается, нужно каждый символ проверять, к какому чарсету он относится и рисовать отдельно соответствующим шрифтом, чтобы всё было всегда хорошо?
Маньяк Робокряк колесит по городу
Re[7]: Код[ировка] Шрёдингера и Wine
От: rudzuk  
Дата: 25.05.23 11:01
Оценка:
Здравствуйте, Marty, Вы писали:

M> R>Потому что связывание логического шрифта с физическим происходит в момент назначения шрифта на контексте устройства. И именно в этот момент система должна иметь достаточно информации для выбора правильного физического шрифта.


M> Вроде бы фонт маппер для каждого символа ищет глиф или как оно зовется. Читал что-то такое. Но могу ошибаться


Когда физический шрифт уже сопоставлен с логическим, то там только cmap (таблица из файла шрифта с индексами глифов) юникодовский используется, насколько я помню.

M> R>Сейчас все несколько проще т.к. шрифты поддерживают чуть не весь юникод (по крайней мере стремяться). Но вообще, шрифты могут иметь ограниченный набор глифов и если использовать неправильный чарсет и при этом указать гарнитуру именно такого шрифта, то увидишь только квадратики.


M> Получается, нужно каждый символ проверять, к какому чарсету он относится и рисовать отдельно соответствующим шрифтом, чтобы всё было всегда хорошо?


Или использовать гарнтитуру с полным покрытием юникода
avalon/3.0.2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.