Я сказал бы, что эта практика способствует концентрации Ваших усилий на 'пространстве задач', а не 'пространстве решения'. Управление решением на стадии становления (дизайн) путем изучения и действительно узнавания и понимает домен. Один из методов (взятый от XP) был бы записью историй, которые происходят в проблемной области. От них можно определить варианты использования и объекты для дизайна. Они 'появляются' и говорят Вам, какие потребности быть в решении, и как они должны будут взаимодействовать друг с другом.
Поскольку 0xce91
находится в формате UTF-8, а % C
ожидает, что он будет в UTF-16, простое решение, подобное приведенному выше, выиграло не работает. Чтобы stringWithFormat: @ "% C"
работал, вам необходимо ввести 0x391
, который является юникодом UTF-16.
Чтобы создать строку из кодировки UTF-8 unichar вам нужно сначала разделить юникод на октеты, а затем использовать initWithBytes: length: encoding
.
unichar utf8char = 0xce91;
char chars[2];
int len = 1;
if (utf8char > 127) {
chars[0] = (utf8char >> 8) & (1 << 8) - 1;
chars[1] = utf8char & (1 << 8) - 1;
len = 2;
} else {
chars[0] = utf8char;
}
NSString *string = [[NSString alloc] initWithBytes:chars
length:len
encoding:NSUTF8StringEncoding];
Приведенный выше ответ хорош, но не учитывает символы UTF-8 длиной более 16 бит, например символ многоточия - 0xE2,0x80,0xA6. Вот корректировка кода:
if (utf8char > 65535) {
chars[0] = (utf8char >> 16) & 255;
chars[1] = (utf8char >> 8) & 255;
chars[2] = utf8char & 255;
chars[3] = 0x00;
} else if (utf8char > 127) {
chars[0] = (utf8char >> 8) & 255;
chars[1] = utf8char & 255;
chars[2] = 0x00;
} else {
chars[0] = utf8char;
chars[1] = 0x00;
}
NSString *string = [[[NSString alloc] initWithUTF8String:chars] autorelease];
Обратите внимание на другой метод инициализации строки, который не требует параметра длины.