Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Добрый день!
Нужна функция поиска подстроки в строке UTF-8.
Нашел, проект ICU, но что-то, видимо, давно не программировал, не могу понять, как его подключить к проекту.
Хотелось бы, просто выдернуть функцию поиска из DLL и все.

Тут нашёл пример кода http://userguide.icu-project.org/collation/icu-string-search-service


Всё, что мы видим - это лишь иллюзия ...

Сообщение было отредактировано: 22 апр 21, 12:10
22 апр 21, 12:14    [22312401]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Да как и любую другую библиотеку - заголовок в include, библиотеку - в список линковки.

Posted via ActualForum NNTP Server 1.5

22 апр 21, 12:43    [22312432]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
Маслов Андрей,
А std.string для кириллицы не подходит? Или кириллица вам узко по задаче?
22 апр 21, 14:01    [22312530]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
PetroNotC Sharp
Маслов Андрей,
А std.string для кириллицы не подходит? Или кириллица вам узко по задаче?

Китайский нужен )
22 апр 21, 14:26    [22312553]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Dimitry Sibiryakov
Да как и любую другую библиотеку - заголовок в include, библиотеку - в список линковки.

Да не получается что-то. Я хотел DLL, без lib. Там слишком много всего тянется.
22 апр 21, 14:27    [22312554]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Dima T
Member

Откуда:
Сообщений: 15795
Маслов Андрей
Я хотел DLL, без lib.

Читай про явное связывание. Тут с примером.
22 апр 21, 14:37    [22312563]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394
Маслов Андрей
Я хотел DLL, без lib.

Ну так и линкуй прямо с DLL. GNU link это умеет.

Но зачем тебе ICU? iconv/MultiByteToWideChar не хватит?..

Сообщение было отредактировано: 22 апр 21, 14:35
22 апр 21, 14:40    [22312565]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394
Маслов Андрей
Китайский нужен )

В китайском есть понятие uppercase/lowercase? Если нет, то подстрока в UTF-8 это просто подстрока и ищется простым strstr.
22 апр 21, 14:45    [22312568]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 8256
Маслов Андрей,

Короче, пример на китайском давай)
22 апр 21, 15:13    [22312602]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 11020
Dimitry Sibiryakov
подстрока в UTF-8 это просто подстрока и ищется простым strstr.
А что делать, если в двух UTF8-строках - две разные нормализации?
22 апр 21, 18:02    [22312725]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Забить, китайцы, походу, языковыми заморочками не озабочены.

Posted via ActualForum NNTP Server 1.5

22 апр 21, 18:17    [22312737]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
petrav
Member

Откуда:
Сообщений: 2944
Basil A. Sidorov
Dimitry Sibiryakov
подстрока в UTF-8 это просто подстрока и ищется простым strstr.
А что делать, если в двух UTF8-строках - две разные нормализации?

Отдать на аутсорс китайцам. :)
22 апр 21, 18:31    [22312741]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Люблю топики про кодировки. Вечная тема.
22 апр 21, 21:48    [22312812]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3654
Маслов Андрей, без "lib", это к LoadLibrary.
22 апр 21, 23:14    [22312852]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3654
Basil A. Sidorov, нормализация может быть только одна.
22 апр 21, 23:15    [22312854]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
mayton
Member

Откуда: loopback
Сообщений: 51389
Некоторые API различают 4 типа нормализации.
23 апр 21, 07:27    [22312905]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 11020
rdb_dev
Basil A. Sidorov, нормализация может быть только одна.
Да, нормализация может быть. А может быть разной или не быть вообще.
23 апр 21, 07:49    [22312914]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 11020
mayton
Некоторые API различают 4 типа нормализации.
... которые перечислены в стандарте юникода.
23 апр 21, 07:50    [22312915]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
PetroNotC Sharp
Маслов Андрей,

Короче, пример на китайском давай)


Исходная: ²»ÄÍ·³£¬Ò׳嶯
Ищем в ней: Í·

Китайский тут не отображается (
23 апр 21, 21:47    [22313448]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53394

Как я и сказал: обычный strstr.

Posted via ActualForum NNTP Server 1.5

23 апр 21, 22:07    [22313455]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 706
Маслов Андрей
Китайский тут не отображается (
Отображается, но через одно место. 真人快打
Надо так писать:
& # 30495 ; & # 20154 ; & # 24555 ; & # 25171 ;
(без пробелов)
24 апр 21, 01:09    [22313479]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Dimitry Sibiryakov
Как я и сказал: обычный strstr.

Не работает strstr. Он находит символ, а его там нет.
24 апр 21, 01:28    [22313484]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Маслов Андрей
Dimitry Sibiryakov
Как я и сказал: обычный strstr.

Не работает strstr. Он находит символ, а его там нет.

Пётр Седов
Маслов Андрей
Китайский тут не отображается (
Отображается, но через одно место. 真人快打
Надо так писать:
& # 30495 ; & # 20154 ; & # 24555 ; & # 25171 ;
(без пробелов)

Вот так выглядит

К сообщению приложен файл. Размер - 12Kb
24 апр 21, 01:32    [22313485]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 706
Маслов Андрей, сохраните STRING и SUBSTRING в текстовом файле в кодировке UTF-8 (стандартный виндовый Notepad умеет, кодировка выбирается в save-окне, выпадающий список внизу). Потом приложите этот текстовый файл к сообщению на форуме.

Компилятор -- C++ Builder? В коде используется тип AnsiString (строка из байтов) или WideString (строка из 16-битных элементов)?
24 апр 21, 02:13    [22313494]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Пётр Седов
Маслов Андрей, сохраните STRING и SUBSTRING в текстовом файле в кодировке UTF-8 (стандартный виндовый Notepad умеет, кодировка выбирается в save-окне, выпадающий список внизу). Потом приложите этот текстовый файл к сообщению на форуме.

Компилятор -- C++ Builder? В коде используется тип AnsiString (строка из байтов) или WideString (строка из 16-битных элементов)?


Да, Builder.
Файл приложил
Используется, просто, char*

К сообщению приложен файл. Размер - 148Kb


Сообщение было отредактировано: 24 апр 21, 02:22
24 апр 21, 02:27    [22313495]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
txt ещё в UTF-8

К сообщению приложен файл (chn.txt - 22bytes) cкачать
24 апр 21, 02:27    [22313496]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Ещё пробовал вот так
std::wstring AnsiToWstring(const std::string& input, DWORD locale = CP_UTF8 )
{
      std::wstring buf(input.size(),0);
      MultiByteToWideChar(locale, 0, input.c_str(), (int)input.length(), const_cast<wchar_t*>(buf.data()), input.size());
      return buf;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   std::wstring w_str2_substr = AnsiToWstring (Edit1->Text.c_str());
   std::wstring w_str1_srsstr = AnsiToWstring (Edit2->Text.c_str());
   ShowMessage(wcsstr( w_str1_srsstr.c_str(), w_str2_substr.c_str()) ? "true" : "false");
}


но результат идентичен, он находит символ, хотя не должен

Сообщение было отредактировано: 24 апр 21, 02:25
24 апр 21, 02:32    [22313497]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Маслов Андрей
Ещё пробовал вот так
std::wstring AnsiToWstring(const std::string& input, DWORD locale = CP_UTF8 )
{
      std::wstring buf(input.size(),0);
      MultiByteToWideChar(locale, 0, input.c_str(), (int)input.length(), const_cast<wchar_t*>(buf.data()), input.size());
      return buf;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   std::wstring w_str2_substr = AnsiToWstring (Edit1->Text.c_str());
   std::wstring w_str1_srsstr = AnsiToWstring (Edit2->Text.c_str());
   ShowMessage(wcsstr( w_str1_srsstr.c_str(), w_str2_substr.c_str()) ? "true" : "false");
}



но результат идентичен, он находит символ, хотя не должен



Поменял на CP_ACP вроде заработало
24 апр 21, 02:41    [22313498]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Пётр Седов
Member

Откуда: Санкт-Петербург
Сообщений: 706
Маслов Андрей
txt ещё в UTF-8
Этот файл в кодировке code page 936, а не UTF-8.

Так попробуйте:
WideString w_str2_substr = Edit1->Text;
WideString w_str1_srsstr = Edit2->Text;
Наверняка там есть неявное преобразование из AnsiString в WideString (который хранит строку в кодировке UTF-16).

Маслов Андрей
Поменял на CP_ACP вроде заработало
WinAPI-шная функция GetACP возвращает 936?
24 апр 21, 02:50    [22313499]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Пётр Седов
Маслов Андрей
txt ещё в UTF-8
Этот файл в кодировке code page 936, а не UTF-8.

Так попробуйте:
WideString w_str2_substr = Edit1->Text;
WideString w_str1_srsstr = Edit2->Text;

Наверняка там есть неявное преобразование из AnsiString в WideString (который хранит строку в кодировке UTF-16).

Маслов Андрей
Поменял на CP_ACP вроде заработало
WinAPI-шная функция GetACP возвращает 936?

Я сохранял, как utf-8. Завтра уже посмотрю. Пора отдохнуть.
24 апр 21, 03:01    [22313500]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
[Linker Error] Unresolved external 'std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >(int, int, const std::allocator<wchar_t>&)' 



Поместил в библиотеку, теперь не могу понять, какой lib не прилинковал(

Сообщение было отредактировано: 24 апр 21, 13:08
24 апр 21, 13:15    [22313556]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Маслов Андрей,

up,
Builder 5

К сообщению приложен файл (src.zip - 14Kb) cкачать
24 апр 21, 19:33    [22313702]     Ответить | Цитировать Сообщить модератору
 Re: Библиотека ICU4C, как подключить  [new]
Маслов Андрей
Member

Откуда: Москва
Сообщений: 1178
Скомпилировалось в rad studio 10.3 без проблем
25 апр 21, 02:24    [22313813]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / C++ Ответить