отличить "no-break пробел" от остальных
От: oleg_m  
Дата: 19.02.02 11:36
Оценка:
Проблема:
Необходимо обработать в VС++ текстовую unicode-строку, состоящую из всевозможных символов, включая как обычный пробел (и его 8 разновидностей 0x2000-0x200b, 0x3000), так и non-break space. Все пробелы кроме последнего ловятся обычной функцией isspace / iswspace. Но последний — никак не ловится. Ибо:
в unicode-шрифтах он кодируется как 0x00A0 (), в windows-шрифтах — обычно как 0xA0, но не всегда.
В шрифте Terminal, например, на этом месте стоит русская буква "а".
Что делать?
Re: отличить "no-break пробел" от остальных
От: Кодт Россия  
Дата: 19.02.02 11:53
Оценка:
Здравствуйте oleg_m, Вы писали:

OM>Проблема:

OM>Необходимо обработать в VС++ текстовую unicode-строку, состоящую из всевозможных символов, включая как обычный пробел (и его 8 разновидностей 0x2000-0x200b, 0x3000), так и non-break space. Все пробелы кроме последнего ловятся обычной функцией isspace / iswspace. Но последний — никак не ловится. Ибо:
OM>в unicode-шрифтах он кодируется как 0x00A0 (), в windows-шрифтах — обычно как 0xA0, но не всегда.
OM>В шрифте Terminal, например, на этом месте стоит русская буква "а".
OM>Что делать?
OM>

А шрифт Terminal — вообще в OEM-кодировке.

Раз в задании сказано "юникодную строку" — то с Юникодом работать и надо.
А в случае ввода текста, набранного неким шрифтом (в некой кодировке) — сначала привести к Юникоду.
Перекуём баги на фичи!
Re: отличить "no-break пробел" от остальных
От: orc Украина http://borisbord.com/
Дата: 19.02.02 15:45
Оценка:
Здравствуйте oleg_m, Вы писали:

OM>Проблема:

OM>Необходимо обработать в VС++ текстовую unicode-строку, состоящую из всевозможных символов, включая как обычный пробел (и его 8 разновидностей 0x2000-0x200b, 0x3000), так и non-break space. Все пробелы кроме последнего ловятся обычной функцией isspace / iswspace. Но последний — никак не ловится. Ибо:
OM>в unicode-шрифтах он кодируется как 0x00A0 (), в windows-шрифтах — обычно как 0xA0, но не всегда.
OM>В шрифте Terminal, например, на этом месте стоит русская буква "а".
OM>Что делать?
OM>

Следующие варианты были предложены кастомеру и отброшены как недостаточные (первые четыре):

1) non-break space встречается нечасто, поэтому забить на это болт,
2) работать только с юникодом,
3) искать все пробелы методом отрисовки каждого символа на экране и просмотра — нарисовалось ли что- то и если нет — это какой-то из пробелов,
4) спросить Билла Гейтса
5) спросить на Привете — находится в стадии тестирования
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.