Steck
написал 17 ноября 2005 года в 05:02 (1301 просмотр)
Ведет себя
как мужчина; открыл 125 тем в форуме, оставил 550 комментариев на сайте.
unsigned char *pdu_str(unsigned char *src){ static iconv_t cd; char *to, *to_p; unsigned char *dest=""; size_t ucs2_len,to_len; int i; cd = iconv_open("UCS-2","UTF-8"); if(cd == (iconv_t)-1){ printf("iconv_open()\n"); exit(0); } ucs2_len = strlen(src); to_len = (ucs2_len*2); to = malloc(to_len); to_p = to; if(iconv(cd,(const char **)&src,&ucs2_len,&to,&to_len)==(size_t)-1) { printf("iconv()\n"); exit(0); } iconv_close(cd); for(i=0;i<=to_len;i++){ dest=g_strdup_printf("%s%02X",dest,to_p[i]); } return dest; }
Дело в том что в dest оказываються НЕ ВСЕ символы. Обрезаються последние 1-6 символов!
Где трабла подскажите? Если вместо to_len вставить strlen(to_p) то в dest оказывается еще меньше символов.
Вообщем хелп!! Уже три дня бьюсь!
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
а ты уверен что strlen корректно работает с ucs2 строками?
Там у меня strlen не работает с ucs2. С utf-8.
Там все нормально
ах, да-да, чой-то я невнимательно посмотрел. По-моему ты неправильно выясняешь длину результата — to_len; После всех манипуляций с iconv там ведь должно лежать количество свободных байт в to, а не количество занятых байт.
Вроде как я понял в iconv() в ucs2_len будет уменьшаться в to_len уверичиватся
Те перекодирует по одному символу из src в to уменьшая кол-во в ucs2_len и увеличивая to_len.
Но что то у меня не то.
Смс приходят урезанные на несколько символов ;o(
оба *len уменьшаются. Они представляют собой количество свободых байт в буферах. Всё сделано для того, чтобы можно было много раз последовательно вызывать iconv. Исправляя какие-то ошибки, например, заменяя неперекодируемые символы какими-нибудь последовательностями типа \x1234.
см. info Libc «Character Set Handling» «Generic Charset Conversion»
Спасибо за эти строки! Все разрулил Ж-)
и чего всё-таки ему надо…
есть
так вот, странность в том, что он мне выводит:
Меня очень интересует первое значение, то есть `\u65279\′. Зачем iconv его туда кладёт?