PCRE, UTF-8 и wchar_t
От: Dr.Offset  
Дата: 07.09.09 17:23
Оценка:
Не подскажет ли уважаемая общественность, как мне строки wchar_t закодированные как UTF-8 обрабатывать с помощью PCRE, в документации написано, что есть поддержка UTF-8, а функции принимают только строки char.

PS. Версия PCRE у меня 3.9. Новее нельзя. Никак.
PPS. Про boost::regex знаю, пробовал, все круто, но нельзя. Никак.
Re: PCRE, UTF-8 и wchar_t
От: MasterZiv СССР  
Дата: 07.09.09 18:18
Оценка:
Dr.Offset пишет:

> Не подскажет ли уважаемая общественность, как мне строки wchar_t

> закодированные как UTF-8 обрабатывать с помощью PCRE, в документации
> написано, что есть поддержка UTF-8, а функции принимают только строки char.

UTF-8 -- это так называемый wide-character string, это char*, а не wchar_t*.

Так что с PCRE всё в порядке.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: PCRE, UTF-8 и wchar_t
От: Dr.Offset  
Дата: 07.09.09 18:30
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Dr.Offset пишет:


>> Не подскажет ли уважаемая общественность, как мне строки wchar_t

>> закодированные как UTF-8 обрабатывать с помощью PCRE, в документации
>> написано, что есть поддержка UTF-8, а функции принимают только строки char.

MZ>UTF-8 -- это так называемый wide-character string, это char*, а не wchar_t*.


Если в большинстве случаев UTF-8 можно читать в char*, это не значит, что во всех

MZ>Так что с PCRE всё в порядке.


Так я и не говорю, что не в порядке. Я спрашиваю как быть.
Re[3]: PCRE, UTF-8 и wchar_t
От: Mr.Cat  
Дата: 07.09.09 18:36
Оценка:
Здравствуйте, Dr.Offset, Вы писали:
DO>Если в большинстве случаев UTF-8 можно читать в char*, это не значит, что во всех
А как ты себе представляешь utf8 не в char*?
Re[2]: PCRE, UTF-8 и wchar_t
От: Dr.Offset  
Дата: 07.09.09 18:39
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>UTF-8 -- это так называемый wide-character string, это char*, а не wchar_t*.


Кстати, wide-string это как раз wchar_t.

UTF-8 это — [0..255]. Ясно, что в char не помещается. Зато помещается в unsigned char. Вопрос с PCRE по-прежнему открыт...
Re[4]: PCRE, UTF-8 и wchar_t
От: Dr.Offset  
Дата: 07.09.09 18:40
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, Dr.Offset, Вы писали:

DO>>Если в большинстве случаев UTF-8 можно читать в char*, это не значит, что во всех
MC>А как ты себе представляешь utf8 не в char*?

Параллельную ветку смотри.
Re[3]: PCRE, UTF-8 и wchar_t
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.09.09 19:09
Оценка: +1
Здравствуйте, Dr.Offset, Вы писали:

DO>Здравствуйте, MasterZiv, Вы писали:


MZ>>UTF-8 -- это так называемый wide-character string, это char*, а не wchar_t*.


DO>Кстати, wide-string это как раз wchar_t.


DO>UTF-8 это — [0..255]. Ясно, что в char не помещается. Зато помещается в unsigned char. Вопрос с PCRE по-прежнему открыт...


Во-первых, то, что для Вас char по умолчанию тождественен signed char и Вы не предполагаете иного — уже показательно.

Во-вторых — а не будет ли любезен благородный дон показать пример, когда signed char не проходит для таких применений? Только, пожалуйста, на реальных платформах и без сферических извращений в вакууме.
The God is real, unless declared integer.
Re[3]: PCRE, UTF-8 и wchar_t
От: alsemm Россия  
Дата: 07.09.09 19:12
Оценка:
Здравствуйте, Dr.Offset, Вы писали:

DO>Здравствуйте, MasterZiv, Вы писали:


MZ>>UTF-8 -- это так называемый wide-character string, это char*, а не wchar_t*.


DO>Кстати, wide-string это как раз wchar_t.


DO>UTF-8 это — [0..255]. Ясно, что в char не помещается. Зато помещается в unsigned char. Вопрос с PCRE по-прежнему открыт...

знаковость char-а определяется настройками компилятора. Так что все помещается.
Re[4]: PCRE, UTF-8 и wchar_t
От: -MyXa- Россия  
Дата: 07.09.09 19:27
Оценка: :)
Здравствуйте, netch80, Вы писали:

N>Во-первых, то, что для Вас char по умолчанию тождественен signed char и Вы не предполагаете иного — уже показательно.


Грубо выдирая твои слова из контекста, хочу отметить, что никогда char не тождественен signed char или unsigned char:

void foo(char)
{
}

void foo(signed char)
{
}

void foo(unsigned char)
{
}

template<typename T>
struct bar;

template<>
struct bar<char>
{
};

template<>
struct bar<signed char>
{
};

template<>
struct bar<unsigned char>
{
};


Т.е. это три совершенно разных человека.
Если не поможет, будем действовать током... 600 Вольт (C)
Re[4]: PCRE, UTF-8 и wchar_t
От: Dr.Offset  
Дата: 07.09.09 19:54
Оценка:
Здравствуйте, netch80, Вы писали:

N>Во-первых, то, что для Вас char по умолчанию тождественен signed char и Вы не предполагаете иного — уже показательно.


TIGCC. Я не могу менять знаковость char только потому что мне так захотелось.

N>Во-вторых — а не будет ли любезен благородный дон показать пример, когда signed char не проходит для таких применений? Только, пожалуйста, на реальных платформах и без сферических извращений в вакууме.


Можно без сарказма и лишнего пафоса обойтись. Хамства вашего я ничем не заслужил.
Re: PCRE, UTF-8 и wchar_t
От: c-smile Канада http://terrainformatica.com
Дата: 07.09.09 20:26
Оценка: 2 (1)
Здравствуйте, Dr.Offset, Вы писали:

DO>Не подскажет ли уважаемая общественность, как мне строки wchar_t закодированные как UTF-8 обрабатывать с помощью PCRE, в документации написано, что есть поддержка UTF-8, а функции принимают только строки char.


Посмотри внутри у своего PCRE как он интерпретирует char как знаковый или нет.
То что он снаружи принимает char* вообще ни о чем не говорит.
Re[5]: PCRE, UTF-8 и wchar_t
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.09.09 21:49
Оценка:
Здравствуйте, Dr.Offset, Вы писали:

N>>Во-первых, то, что для Вас char по умолчанию тождественен signed char и Вы не предполагаете иного — уже показательно.

DO>TIGCC.

И что?

DO> Я не могу менять знаковость char только потому что мне так захотелось.


Так всё-таки — там что, байты другие? У них не 8 бит? И представление одной и той же текстовой строки в восьмибитной кодировке будет иначе интерпретировано как текст в зависимости от того, написано signed или unsigned? Я хочу на это посмотреть.;))

N>>Во-вторых — а не будет ли любезен благородный дон показать пример, когда signed char не проходит для таких применений? Только, пожалуйста, на реальных платформах и без сферических извращений в вакууме.

DO>Можно без сарказма и лишнего пафоса обойтись. Хамства вашего я ничем не заслужил.

Ну да, как вопрос по сути — так сразу "хамство". Так всё-таки расскажете? Пока что я не вижу никаких признаков того, что тут есть проблемы. Конверсия между строками типа char, unsigned char, signed char в ваших условиях возможна во все стороны без проблем для содержимого (хотя с очевидными проблемами для интерпретации в ряде случаев).
The God is real, unless declared integer.
Re[5]: PCRE, UTF-8 и wchar_t
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.09.09 21:57
Оценка:
Здравствуйте, -MyXa-, Вы писали:

N>>Во-первых, то, что для Вас char по умолчанию тождественен signed char и Вы не предполагаете иного — уже показательно.

MX>Грубо выдирая твои слова из контекста, хочу отметить, что никогда char не тождественен signed char или unsigned char:

Поправка тут действительно нужна — следовало сказать "по поведению" и процитировать стандарт:

The implementation shall define char to have the same range,
representation, and behavior as either signed char or unsigned char.

(C99, пункт 6.2.5.15)

MX>
MX>void foo(char)
MX>{
MX>}

MX>void foo(signed char)
MX>{
MX>}
MX>


А вот это уже не совсем к месту — контекст данного треда — C, а не C++.

MX>Т.е. это три совершенно разных человека.


:)))
The God is real, unless declared integer.
Re[5]: PCRE, UTF-8 и wchar_t
От: Mr.Cat  
Дата: 08.09.09 06:28
Оценка:
Здравствуйте, Dr.Offset, Вы писали:
DO>Параллельную ветку смотри.
Ты про это что-ли?

UTF-8 это — [0..255]. Ясно, что в char не помещается.

Utf8 пофиг на числа — биты и байты играют роль.
Re[2]: PCRE, UTF-8 и wchar_t
От: Кодт Россия  
Дата: 08.09.09 10:04
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Посмотри внутри у своего PCRE как он интерпретирует char как знаковый или нет.

CS>То что он снаружи принимает char* вообще ни о чем не говорит.

А можно в двух словах, каким образом знаковость влияет на работу PCRE?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[3]: PCRE, UTF-8 и wchar_t
От: MasterZiv СССР  
Дата: 08.09.09 15:02
Оценка:
Dr.Offset пишет:

> MZ>UTF-8 -- это так называемый wide-character string, это char*, а не

> wchar_t*.
>
> Если в большинстве случаев UTF-8 можно читать в char*, это не значит,
> что во всех

Можно читать во всех случаях. Лишь бы буфер был достаточного размера.

>

> MZ>Так что с PCRE всё в порядке.
>
> Так я и не говорю, что не в порядке. Я спрашиваю как быть.

Не хранить UTF-8 строки в массивах wchar_t.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: PCRE, UTF-8 и wchar_t
От: MasterZiv СССР  
Дата: 08.09.09 15:04
Оценка:
Dr.Offset пишет:

> MZ>UTF-8 -- это так называемый wide-character string, это char*, а не

> wchar_t*.
>
> Кстати, wide-string это как раз wchar_t.

Блин, конечно же, описался.

multi-byte character string , MBCS, MBS
Posted via RSDN NNTP Server 2.1 beta
Re[3]: PCRE, UTF-8 и wchar_t
От: MasterZiv СССР  
Дата: 08.09.09 15:06
Оценка:
Кодт пишет:

> CS>То что он снаружи принимает char* вообще ни о чем не говорит.

>
> А можно в двух словах, каким образом знаковость влияет на работу PCRE?

Да никаким не влияет.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: PCRE, UTF-8 и wchar_t
От: c-smile Канада http://terrainformatica.com
Дата: 09.09.09 06:08
Оценка:
Здравствуйте, Кодт, Вы писали:

К>А можно в двух словах, каким образом знаковость влияет на работу PCRE?


Да вот тебе пример из жизни:

#include <memory.h>

unsigned char u8text[] = { 0xEF, 0xBB, 0xBF, 'H', 'i', '!' };

bool has_bom( const char* u8text )
{
  return u8text[0] == 0xEF &&
         u8text[1] == 0xBB &&
         u8text[2] == 0xBF;
}

int main(int argc, char* argv[])
{
    printf("has UTF-8 BOM %d\n", has_bom((const char*)u8text) );
    return 0;
}
Re[4]: PCRE, UTF-8 и wchar_t
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 09.09.09 06:15
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Кодт, Вы писали:


К>>А можно в двух словах, каким образом знаковость влияет на работу PCRE?


CS>Да вот тебе пример из жизни:


CS> return u8text[0] == 0xEF &&

CS> u8text[1] == 0xBB &&
CS> u8text[2] == 0xBF;

И что? Вижу пример, как знаковость влияет на плохо написанный код. Но не вижу, как она влияет на работу PCRE. Следует помнить, что это библиотека с длинной историей, богатой функциональностью и огромным накопленным опытом мультиплатформенного применения, и уж такими мелочами, как signed char, её не сломать.
The God is real, unless declared integer.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.