![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Есть Unicode - текст.
Как узнать, какую возможную "однобайтовую" кодировку можно использовать для этого текста без "потери символов". |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Вопрос задан непонятно.
-------------------- ![]() |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
В Unicode тексте я могу хранить как русские, английские, чешские буквы.
Если текст содержит только русские, я мог бы использовать "однобайтовую" ISO-8859-5. Если текст содержит только английские, я мог бы использовать "однобайтовую" ISO-8859-1(или лучше US-ASCII). Если текст содержит только чешские, я мог бы использовать "однобайтовую" ISO-8859-2, ну и так далее Ясно, что если текст содержит и русские и чешские,то подходящую "однобайтовую" кодировку не найти. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
ИМХО, это на http://www.unicode.org надо разбираться, как у них там диапазоны кодировок устроены.
-------------------- ![]() |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Я думал, есть попроще .... |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
ИМХО готового решения нет. Наверно, лучшим способом будет заполнить маппинг для всех символов на множество доступных энкодингов, а затем искать интерсект этих множеств для всех символов строки. Для проверки для отдельного символа - получаем от энкодинга энкодер (encoding.GetEncoder()), ставим ему для свойства Fallback или свой класс, или (для простоты) - EncoderFallback.ExceptionFallback. Ну и или в своём лкассе, или просто в catch убираем энкодинг из списка допустимых для полученного символа (вначале для всех символов ставим все возможные энкодинги). Типа общая идея
Добавлено через 3 минуты и 22 секунды Ах да - при инициализации множеств заполняем их не всеми энкодингами, а только однобайтовыми (раз такое условие). Чтоб потом лишних проверок избежать. |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Любитель, не совсем понятно....
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Любитель, всё равно это не поможет найти именно ту единственную однобайтовую кодировку, которая подходит для всех символов в файле, и о которой вопрос в первом посте.
-------------------- ![]() |
|||
|
||||
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Что-то такое вроде. Добавлено @ 17:23
Дык проверять без сомненья для всех символов. И не единственную - а их множество. Кстати, Set в примере выше из PowerCollections с кодеплекса. Для .Net FX 3.5 можно заменить на HashSet. Последнего под рукой нет (3.5) Это сообщение отредактировал(а) Любитель - 7.5.2008, 17:37 |
||||
|
|||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 11 Всего: 92 |
Так, исправил до компилируемого и работающего состояния. Правда маппинг этот заполняется очень долго (вариант - заполнить один раз и сохранить в файл
Это сообщение отредактировал(а) Любитель - 7.5.2008, 18:08 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |