Ищите или сравните в Кластере Графемы на корейском языке

В моей текущей реализации a UISearchBarController Я использую [NSString compare:] в filterContentForSearchText:scope: метод делегата возвратить соответствующие объекты на основе их свойства имени к результатам UITableView поскольку Вы начинаете вводить.

До сих пор это работает отлично на английском и корейском языке, но что я хотел бы смочь сделать, искать в NSStringопределенные символьные кластеры. Это только применимо для небольшого количества языков, из которых корейский язык является тем.

На английском языке, compare: возвращает новые результаты после каждой буквы, которую Вы вводите, но на корейском языке сгенерированы результаты, после того как Вы завершаете распознанный кластер графемы. Я хотел бы смочь перерыть свое корейское свойство имени объектов через отдельные элементы, которые составляют слог.

Кто-либо может пролить какой-либо свет на то, как приблизиться к этому? Я уверен, что это имеет некоторое отношение к поиску символов UTF16 вручную, или путем использования более низкого класса уровня.

Удачи!

Вот определенный пример, это просто не работает:

`NSString *string1 = @"이"; 
`NSString *string2 = @"ㅣ";
NSRange resultRange = [[string1 decomposedStringWithCanonicalMapping] rangeOfString:    [string2 decomposedStringWithCanonicalMapping] options:(NSLiteralSearch)];

Результатом всегда является NSNotFound, с или без decomposedStringWithCanonicalMapping.

Какие-либо идеи?

6
задан Jessedc 4 February 2010 в 01:07
поделиться

2 ответа

NMAP, мой хороший друг сделает это для вас:)

http://nmap.org/book/man.html (см. пример в нижней части этой страницы)

-121--3690536-
<?php
  $fp = fopen('18201010338AM16390621000846.png', 'rb');
  $sig = fread($fp, 8);
  if ($sig != "\x89PNG\x0d\x0a\x1a\x0a")
  {
    print "Not a PNG image";
    fclose($fp);
    die();
  }

  while (!feof($fp))
  {
    $data = unpack('Nlength/a4type', fread($fp, 8));
    if ($data['type'] == 'IEND') break;

    if ($data['type'] == 'tEXt')
    {
       list($key, $val) = explode("\0", fread($fp, $data['length']));
       echo "<h1>$key</h1>";
       echo nl2br($val);

       fseek($fp, 4, SEEK_CUR);
    }
    else
    {
       fseek($fp, $data['length'] + 4, SEEK_CUR);
    }
  }


  fclose($fp);
?>

Предполагается, что в основном хорошо сформирован файл PNG.

-121--2948934-

Я не эксперт, но я думаю, что вы вряд ли найдете чистое решение для того, что вы хотите. Похоже, нет никакой связи между значением Юникода корейского символа и графемами, из которых он состоит.

например. «이» - это\uc774, а «ㅣ» - это\u3163. С точки зрения NSString, они являются только двумя разными символами без конкретных отношений друг с другом.

Я подозреваю, что вам придется найти или создать явное отображение между символами и их графемами, а затем написать свою собственную поисковую функцию, которая консультирует это отображение.

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

2
ответ дан 17 December 2019 в 18:16
поделиться

Если вы используете Сравните: варианты с NSLiterAlStringS, он должен сравнивать символ символа, то есть точки кода Unicode, независимо от графема. Поведение по умолчанию Сравнить: - это использовать никаких вариантов. Вы могли бы использовать - декомпонерившимися с учетом функциональности , чтобы получить байты Unicode входной строки, но я не уверен, как это будет взаимодействовать с Сравнить: .

1
ответ дан 17 December 2019 в 18:16
поделиться