перекодировать в юникод
От: Аноним  
Дата: 03.09.07 06:43
Оценка:
Здраствуйте.

Есть строка типа string. Когда пользователь вводит данные, программа в эту строку записывает его данные, затем, мне нужно эти символы, перегнать в utf-8.

Если он ввёл например иероглиф или русскую букву, как его перегнать в utf-8, не могу понять, саму последовательность дейсвий не понимаю. разъяните плиз.
Re: перекодировать в юникод
От: c-smile Канада http://terrainformatica.com
Дата: 03.09.07 06:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>... как его перегнать в utf-8, не могу понять, саму последовательность дейсвий не понимаю. разъяните плиз.


http://ru.wikipedia.org/wiki/UTF8
Re[2]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 07:03
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>http://ru.wikipedia.org/wiki/UTF8


а читал уже. Это всё теория, мне б посметреть как на практике всё это сделать, именно на си++.
Re[3]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 07:09
Оценка:
Мнеб для начала понять как можно
string buff("я");
превратить в два байта
Re[3]: перекодировать в юникод
От: c-smile Канада http://terrainformatica.com
Дата: 03.09.07 07:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, c-smile, Вы писали:


CS>>http://ru.wikipedia.org/wiki/UTF8


А>а читал уже. Это всё теория, мне б посметреть как на практике всё это сделать, именно на си++.


Там же все написано. (Тебе надо учится работать с инетом. Помогает сильно)

http://www.codeproject.com/cpp/utf8ostream.asp
Re[4]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 07:34
Оценка:
c-smile, а может расскажешь в двух словах, что к чему (как русский символ перекодировать)? а дальше я уже сам разбирусь.
Re[4]: перекодировать в юникод
От: Sergey Россия  
Дата: 03.09.07 07:42
Оценка: -1
> Мнеб для начала понять как можно
> string buff("я");
> превратить в два байта

wstring buf(L"я");
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[5]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 07:56
Оценка:
Sergey, а почему не такое решение предложил:
short unsigned buff = 'я';

?
Re: перекодировать в юникод
От: AleksandrN Россия  
Дата: 03.09.07 08:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здраствуйте.


А>Есть строка типа string. Когда пользователь вводит данные, программа в эту строку записывает его данные, затем, мне нужно эти символы, перегнать в utf-8.


А>Если он ввёл например иероглиф или русскую букву, как его перегнать в utf-8, не могу понять, саму последовательность дейсвий не понимаю. разъяните плиз.



Если пишешь в Windows, то смотри в MSDN описание функций MultiByteToWideChar и WideCharToMultiByte.
Если в UNIX — man 3 iconv.

Если требуется кросс-платформенный код, то в библиотеках Qt и wxWidgets есть средства для работы с различными кодировками.
Re[6]: перекодировать в юникод
От: Sergey Россия  
Дата: 03.09.07 08:15
Оценка:
> Sergey, а почему не такое решение предложил:

Потому что в вопросе было string.

>
> short unsigned buff = 'я';
>

> ?

Тогда уж short unsigned buff = L'я';
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 08:16
Оценка:
AN>Если в UNIX — man 3 iconv.

AN>Если требуется кросс-платформенный код, то в библиотеках Qt и wxWidgets есть средства для работы с различными кодировками.


я уверен, что есть очень простое решение.

Возьмём для примера букву 'а' (русская) в таблице символов unicode она числится под номером 0430h. Как перекодировать букву 'а' в 0430? мне только это нужно... а 0430 в utf-8 я уже сам перекодирую.
Re[7]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 08:22
Оценка:
Sergey, а я думал ты жжёшь.
unsigned long buff = L'а';
даёт 1072 а hex 0430...

а если символ иероглиф, то какой для него тип для buff определять?
Re[8]: перекодировать в юникод
От: Sergey Россия  
Дата: 03.09.07 08:36
Оценка:
> Sergey, а я думал ты жжёшь.
> unsigned long buff = L'а';
> даёт 1072 а hex 0430...
>
> а если символ иероглиф, то какой для него тип для buff определять?

Тип все тот же — чего-нибудь двухбайтовое. Лучше wchar_t, если компилятор про них знает.
Посмотрел начало темы — символ вводится пользователем (а не известен на стадии компиляции), соответственно надо пользоваться функциями mbtowc, _mbtowc_l, или codecvt::in, или виндовой MultiByteToWideChar.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[9]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 09:16
Оценка:
Здравствуйте, Sergey, Вы писали:

>> Sergey, а я думал ты жжёшь.

>> unsigned long buff = L'а';
>> даёт 1072 а hex 0430...
>>
>> а если символ иероглиф, то какой для него тип для buff определять?

S>Тип все тот же — чего-нибудь двухбайтовое. Лучше wchar_t, если компилятор про них знает.

S>Посмотрел начало темы — символ вводится пользователем (а не известен на стадии компиляции), соответственно надо пользоваться функциями mbtowc, _mbtowc_l, или codecvt::in, или виндовой MultiByteToWideChar.

а wchar_t может содержать 65536 символов, а в уникоде их ~99000, всеж ведь не влезут?
Re[9]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 09:23
Оценка:
а вообще, спасибо большое, если даже на последний вопрос не ответите
Re[10]: перекодировать в юникод
От: CiViLiS Россия  
Дата: 03.09.07 09:44
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>а wchar_t может содержать 65536 символов, а в уникоде их ~99000, всеж ведь не влезут?

Прочтите наконец wiki и все ссылки. Hint: смотреть отличия UC-2 и UTF-16
... << RSDN@Home 1.2.0 alpha rev. 727>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Re[10]: перекодировать в юникод
От: Sergey Россия  
Дата: 03.09.07 09:44
Оценка:
>>> Sergey, а я думал ты жжёшь.
>>> unsigned long buff = L'а';
>>> даёт 1072 а hex 0430...
>>>
>>> а если символ иероглиф, то какой для него тип для buff определять?
>
> S>Тип все тот же — чего-нибудь двухбайтовое. Лучше wchar_t, если компилятор про них знает.
> S>Посмотрел начало темы — символ вводится пользователем (а не известен на стадии компиляции), соответственно надо пользоваться функциями mbtowc, _mbtowc_l, или codecvt::in, или виндовой MultiByteToWideChar.
>
> а wchar_t может содержать 65536 символов, а в уникоде их ~99000, всеж ведь не влезут?

С такой экзотикой, которая в 16 бит не влазит, я пока не общался. Если надо с ними работать — попробуйте сразу конвертировать узкие строки в UTF-8, а не в UCS-2 (прокатит ли, нет ли — не знаю). Четырехбайтная кодировка (UTF-32), равно как и двухбайтная с переменной длиной символа (UTF-16), насколько я знаю, в винде не поддерживается. Возможно, дело решается с помощью сторонних библиотек.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: перекодировать в юникод
От: Кодт Россия  
Дата: 03.09.07 10:00
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>я уверен, что есть очень простое решение.


А>Возьмём для примера букву 'а' (русская) в таблице символов unicode она числится под номером 0430h. Как перекодировать букву 'а' в 0430? мне только это нужно... а 0430 в utf-8 я уже сам перекодирую.


А откуда ты возьмёшь эту букву для примера?

Если у тебя обычная char'овая консоль, и пользователь там что-то вводит, то к тебе приезжают (одно- или мульти-)байтовые коды символов в текущей кодировке.

Поэтому первый шаг — пергнать введённую строку в UTF-16: mbtowc(). И второй шаг — перегнать из UTF-16 в UTF-8: wctomb().
Либо сразу перегнать из текущей кодировки в желаемую UTF-8: libiconv.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[11]: перекодировать в юникод
От: Аноним  
Дата: 03.09.07 10:08
Оценка:
Здравствуйте, CiViLiS, Вы писали:

мне не нужны ссылки на теорию, я ж сказал уже, я её уже начитался. Велосипед трудно создавать, вы пробовали хоть?
Re[11]: перекодировать в юникод
От: Sergey Россия  
Дата: 03.09.07 10:15
Оценка:
> строки в UTF-8, а не в UCS-2 (прокатит ли, нет ли — не знаю). Четырехбайтная кодировка (UTF-32), равно как и двухбайтная с переменной длиной символа (UTF-16), насколько я знаю, в винде не поддерживается.

Вру — в MSDN пишут что начиная с Vista оно умеет UTF-16.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.