PCRE и UTF-16
Прочитал в документации по библиотеке PCRE, что с версии 8.30 она поддерживает кодировку
Написал два примера на Си: один для
# это я на своём «Маке» скомпилировал
~$ gcc-4.7 -I/usr/local/Cellar/pcre/8.32/include/ -L/usr/local/Cellar/pcre/8.32/lib/ -lpcre -std=c99 -o utf8 utf8.c
~$ gcc-4.7 -I/usr/local/Cellar/pcre/8.32/include/ -L/usr/local/Cellar/pcre/8.32/lib/ -lpcre16 -std=c99 -o utf16 utf16.c
# два файла в разных кодировках, почти 1,5 млн. строк, правда используется далеко не это количество
~$ wc -l utf8.txt
1424462 utf8.txt
~$ wc -l utf16.txt
1424462 utf16.txt
~$ time ./utf8
PCRE version: 8.32 2012-11-30
Yes!
…
Yes!
real 0m1.372s
user 0m1.286s
sys 0m0.039s
~$ time ./utf16
PCRE version: 8.32 2012-11-30
Yes!
…
Yes!
real 0m0.048s
user 0m0.004s
sys 0m0.035sЛибо я
Лично мне кажется, что API толком не работает и ошибка в том, что в pcre16_compile не указывается длина шаблона.
Комментарии 5
Btw, а то, что в pcre16_compile передаётся строка не в
Ну pcre16_compile выдаёт ошибку, есличто-то не так, а тут не выдал. Я сейчас проснусь и попробую передать туда UTF-16.
В документации пока ничего не виду на эту тему. Я предположил, что сама функция pcre16_compile умеет распознавать конец таких строк и просто нафигачил нулей после каждого символа, компиляция прошла ровно так же, время не изменилось.