Вывод всех символов указанной кодовой страницы22.02.2018, 13:19. Показов 1983. Ответов 3
Метки нет (Все метки)
Вроде простая задача, а почему-то не получается.
Надо вывести строку, например в TextBox, составленную из всех символов заданной кодовой страницы. Идея была такая 1. Получить максимальное количество байт для символа данной КС 2. Перебрать все значения в виде Uint32 (мало ли кодировка многобайтная) 3. Получить нужные байты BitConverter'ом 4. конвертировать байты в символ функцией Encoding.GetEncoding().GetString Тестовый код:
2
|
||||||
| 22.02.2018, 13:19 | |
|
Ответы с готовыми решениями:
3
Получить номер кодовой страницы и номер символа в этой кодовой странице для каждого символа Нахождение и вывод на экран количества всех файлов в указанной папке Вывести строку, составленную из исходной заменой всех символов, которые больше символа на указанной позиции |
| 19.03.2018, 00:21 [ТС] | ||||||||||||||||
Сообщение было отмечено OwenGlendower как решение
Решение
Проблема оказалась где в первую очередь оказывается проблема, т.е. в постановке задачи и некоторых нюансах. Все-таки "для всех поддерживаемых .NET кодовых страниц" вывести все возможные символы так и не удалось (тем более таким образом, как планировалось изначально)
Саморазбор задачи под спойлером: Кликните здесь для просмотра всего текста
Для начала, пришлось задачу все-таки глобально поделить на 3 больших части: — кодировки однобайтовые (Windows 1251, DOS 866 и т.д.) — кодировка Unicode — кодировки многобайтовые, но не Unicode (всякие там японские, китайские и прочие). Однобайтовые С ними проще всего. Достаточно перебрать все символы от 0 до 255, перекодировать их последовательно в UTF-16 стандартной функцией класса Encoding и вывести на экран.
Unicode С этим тоже особой сложности нет, весь стандарт открытый, можно взять список диапазонов Юникода прямо с официального сайта. Разобрать, залить в ComboBox и отображать кусками, для больших кусков сделать постраничное листание. Главная проблема была побороть глюк с отображением символа с кодом > FFFFh Отображение суррогатной пары (символа с кодом > FFFF) , из-за чего пришлось использовать RichTextBox и периодически пересчитывать ему размер в зависимости от используемого шрифта и символа, а также в нужных местах перерисовывать таблицу, чтоб та не расползалась. Вторая проблема - изобрести какое-то подобие "композитных" шрифтов в BabelMap, т.е. подгружать разные шрифты для разных диапазонов Unicode, поскольку шрифта, абсолютно поддерживающего все символы Unicode нет, он бы получился чудовищно большим. И те, которые есть-то, не маленькие, из нескольких файлов, и весят под сотню мегабайт. Чтоб ради задания не загадить систему шрифтами, пришлось предусмотреть возможность грузить их из файлов, а тут поджидал уже другой глюк, на этот раз Framework'а [url]https://www.cyberforum.ru/windows-forms/thread2210086.html][/url В общем, процентов 90 кода (да и процессорного времени) уходит на возню со шрифтами и отрисовку таблицы. Отделить варианты кодирования Unicode от других кодовых страниц тоже несложно, благо всего этих вариантов не так много (UTF16 LE/BE, UTF32 LE/BE, UTF8 и UTF7).
А получить конкретный символ можно вот таким способом:
if ((num >= 0x00d800) && (num <= 0x00dfff)) - это чтобы не попасть в диапазоны суррогатов, но все-таки на их месте что-то отображать (в шрифтах там обычно пустые символы или знаки ?), а char.ConvertFromUtf32() при попадании в диапазон суррогатов свалится с ошибкой. Остальные многобайтные кодировки А вот тут уже так легко не получится, все-таки единственный вменяемый способ, это искать спецификации на каждую. Поэтому, в рамках задания, эта часть задачи была признана некорректной и не решаемой. Нет, был, конечно, вариант простого перебора всех возможных вариантов. Максимальное количество байт, необходимых для кодирования символа в указанной кодировке можно получить с помощью Encoding.GetEncoding(cp).GetMaxByteCount (1), но перебрать все возможные значения, например, для массива размером уже в 4 байта, перебирая его, например, так https://pastebin.com/URiyY0Vu , да еще и фильтруя все лишнее, непомерно долго. Зато получился интересный пример, студенту помогли, заметку написали, сделали зачин для редактора астрологических и магических текстов, может и здесь пригодится кому. Пример нашей "таблицы символов" на Github https://github.com/tolik-punko... harset-app
1
|
||||||||||||||||
|
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
|
|||
| 19.03.2018, 00:28 | |||
|
Добавлено через 1 минуту
0
|
|||
| 19.03.2018, 00:36 [ТС] | |
|
Sternman, Изначально была студенческая учебная задача, сделать "Charmap как в Windows".
А потом она превратилась в "разобраться с этими проклятыми кодировками", "наконец, когда разобрался, написать все-таки свой редактор неких мистических текстов" (еще пишу) и в итоге получилась развернутая заметка для нашего сайта. Пусть и тут лежит, мало ли кому понадобится (или подобное задание попадется).
0
|
|
| 19.03.2018, 00:36 | |
|
Помогаю со студенческими работами здесь
4
Скрипт, который находит суммарный размер всех файлов в указанной папке. Вывод осуществляется на экран монитора (в окно Скрипт, который находит количество всех файлов в указанной папке. Вывод осуществляется на экран монитора (в окно вывода Смена кодовой страницы в MSSQL7. Как? замена кодовой страницы таблицы dbf Как программно можно определить тип кодовой страницы? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|