Как определить, является ли Unicode-символ буквой какого-либо языка?

Тема в разделе "WASM.WIN32", создана пользователем CyberManiac, 25 май 2011.

  1. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Собственно, вот такой вопрос. Из окружения гарантировано наличие только стандартных библиотек Windows 2000 и выше.
     
  2. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    IsCharAlpha?
     
  3. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Забачно. Если верить MSDN, оно работает, основываясь на языке, выбранном пользователем при установке Винды. А на самом деле юникодный вариант даже с арабскими буквами работает, хотя у меня арабский не установлен точно.
     
  4. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    Естественно! ANSI функция работает с CHAR, а utf с WCHAR.) Подробности в MSDN.
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    CyberManiac
    В UNICODE часть символов оставлено под "символы определенные пользователем", так что даже IsCharAlpha может не помочь...
     
  6. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    djmans, так там и написано "This determination is based on the semantics of the language selected by the user during setup or through Control Panel." "Based on" можно понимать как угодно, а про то, что unicode-версия узнаёт буквы _всех_ присутствующих в этой кодировке языков, там ни слова.

    Mikl___, это слишком ивращённые тонкости, чтобы ими заморачиваться. Мне просто нужно корректное прыгание по началам слов в текстовом редакторе :)
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    CyberManiac
    тогда проще искать разделители слов (пробел, табуляцию, знаки препинания) их кодировка во многих языках одинаковы (кириллица, латиница, девангари), а вот на иврите и арабском пишут справа налево и там вы будете прыгать по окончаниям слов, а в китайском, японском, корейском слова в предложении могут не разделяться или разделятся кружком, кроме того, они не всегда используют юникод, а Shift JIS (Japanese Industrial Standards) в японском; Big5, HKSCS, Guobiao, GB2312, GBK, GB18030, ISO-2022 и EUC для китайского; EUC-KR для корейского
     
  8. amdf

    amdf New Member

    Публикаций:
    0
    Регистрация:
    1 фев 2011
    Сообщения:
    39
    Берёшь таблицу Unicode.
    Делаешь базу данных, где для каждого символа прописываются сведения, в каком языке он встречается. Например, символ "кириллическое А" может быть символом русского, украинского, белорусского, татарского, казахского, монгольского, болгарского и других языков.
    Далее берётся символ, и с учётом кодировки сравнивается с базой данных.
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    в пцре есть ключ \b отвечающий за границы слов. он работает и под уникодом, и под утф8. можно посмотреть как это делается там (OP_WORD_BOUNDARY) если не охота тащить всю пцре за собой (.lib в 100-150кб).
     
  10. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    На мой взгляд, самый верный способ - посмотреть как это делает сама Windows. Возьмите исходники edit-control'а, благо они доступны, и посмотрите там.
     
  11. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    unciode функции на то и unciode, чтобы не зависеть от текущих настроек языка)