Определение, если символ Unicode виден? - PullRequest
2 голосов
/ 20 ноября 2008

Я пишу текстовый редактор, в котором есть возможность отображать маркер вместо любого невидимого символа Юникода. К сожалению, не представляется простым способом определить, является ли символ Unicode невидимым.

Мне нужно найти текстовый файл, содержащий каждый символ Unicode, чтобы я мог просматривать невидимые символы. Кто-нибудь знает, где я могу найти такой файл?

РЕДАКТИРОВАТЬ: я пишу это приложение в Какао для Mac OS X.

Ответы [ 7 ]

3 голосов
/ 20 ноября 2008

О, я вижу ... настоящие невидимые символы;) Этот FAQ, вероятно, будет полезен:

http://www.unicode.org/faq/unsup_char.html

В нем перечислены текущие невидимые кодовые точки и содержится другая информация, которая может оказаться вам полезной.

РЕДАКТИРОВАТЬ: Добавлена ​​информация, относящаяся к какао

Поскольку вы используете Какао, вы можете получить набор символов Юникода для управляющих символов и сравнить с ним:

NSCharacterSet* controlChars = [NSCharacterSet controlCharacterSet];

Возможно, вы также захотите взглянуть на ссылку FAQ, которую я разместил выше, и добавить любые символы, которые, по вашему мнению, могут вам понадобиться, на основе информации, содержащейся в наборе символов, возвращаемом controlCharacterSet.

РЕДАКТИРОВАТЬ: Добавлен пример создания строки Unicode из символа Unicode

unichar theChar = 0x000D;
NSString* thestring = [NSStirng stringWithCharacters:&theChar length:1];
1 голос
/ 20 ноября 2008

Дайте мне знать, если этот код поможет вообще:

-(NSString*)stringByReplacingControlCharacters:(NSString*)originalString
{
    NSUInteger length = [originalString length];
    unichar *strAsUnichar = (unichar*)malloc(length*sizeof(unichar));
    NSCharacterSet* controlChars = [NSCharacterSet controlCharacterSet];
    unichar bullet = 0x2022;

    [originalString getCharacters:strAsUnichar];
    for( NSUInteger i = 0; i < length; i++ ) {
        if( [controlChars characterIsMember:strAsUnichar[i]] )
            strAsUnichar[i] = bullet;
    }

    NSString* newString = [NSString stringWithCharacters:strAsUnichar length:length];
    free(strAsUnichar);

    return newString;
}

Важные замечания:

Вероятно, это не самый эффективный способ сделать это, поэтому вам придется решить, как вы хотите оптимизировать, после того, как он заработает. Это работает только с символами на BMP, поддержка компостных символов должна быть добавлена, если у вас есть такое требование. Это не проверяет ошибки вообще.

0 голосов
/ 20 ноября 2008

этот код может вас заинтересовать: http://gavingrover.blogspot.com/2008/11/unicode-for-grerlvy.html

0 голосов
/ 20 ноября 2008
0 голосов
/ 20 ноября 2008

Текущая официальная версия Unicode - 5.1.0, и текстовые файлы, описывающие все кодовые точки, которые можно найти по адресу http://www.unicode.org/standard/versions/components-latest.html

0 голосов
/ 20 ноября 2008

Хорошее место для начала - консорциум Unicode , который предоставляет большой объем данных, некоторые из которых будут именно тем, что вы ищете.

Я также нахожусь в процессе создания DLL, которой вы даете строку, и она возвращает UCN каждого символа. Но не задерживай дыхание.

0 голосов
/ 20 ноября 2008

Это невыполнимая задача, Unicode поддерживает даже Klingon, поэтому он не будет работать. Однако большинство текстовых редакторов используют стандартные невидимые символы ANSI. И если ваша библиотека Unicode хороша, она будет поддерживать поиск эквивалентных символов и / или категорий, вы можете использовать эти две функции, как и любой другой редактор

Редактировать: Да, я был дураком из-за поддержки клингонов, но это не говорит о том, что это неправда ... Конечно, консорциум не поддерживает Клингон, однако движение за клингонов есть «Личная область использования» Юникода, определенная для клингонского алфавита (U + F8D0 - U + F8FF). Ссылка здесь для заинтересованных:)

Примечание: Интересно, какой редактор используют программисты клингонов ...

...