Форум программистов, компьютерный форум CyberForum.ru

Юникод в Си++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 13:44     Юникод в Си++ #1
Здравствуйте.

C++
1
2
3
4
5
6
7
8
9
10
int main(int argc, char *argv[])
{
 
    wstring s1 = L"abracadabra";
    cout << s1.size() << endl; // 11
    wstring s2 = L"абракадабра";
    cout << s2.size() << endl; // 22
 
    getchar();
}
Вроде бы все как надо: файл у меня в utf-8, а она экономит байт на латинских символах. Но вот в чём вопрос. wstring - это контейнер wchar_t, а у них размер 2 байта и поэтому, вроде бы, у обеих строк длина должна быть 22.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
16.08.2011, 13:48     Юникод в Си++ #2
jerdeks,
size() возвращает не размер в байтах, а количество элементов в контейнере. и во втором случае тоже должно быть 11.
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 13:50  [ТС]     Юникод в Си++ #3
Бинарник выложить? Хотя, я тоже так думал всегда, но факт - пишет во втором случае 22
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
16.08.2011, 13:57     Юникод в Си++ #4
jerdeks, не планировал компилировать...
как уже и говорил, size() возвращает количество элементов в контейнере, а не их размер в байтах.
Миниатюры
Юникод в Си++  
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 14:21  [ТС]     Юникод в Си++ #5
=) А теперь конвертни исходник в утф-8. И тогда именно так, как у меня будет и я не понимаю почему
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
16.08.2011, 14:33     Юникод в Си++ #6
Цитата Сообщение от jerdeks Посмотреть сообщение
=) А теперь конвертни исходник в утф-8. И тогда именно так, как у меня будет и я не понимаю почему
а ну да, все верно, ведь там запись то будет
абракадабра
jerdeks
1 / 1 / 0
Регистрация: 19.04.2009
Сообщений: 13
16.08.2011, 14:36  [ТС]     Юникод в Си++ #7
угу. и это гениально - чтобы работать с юникодом иходник должен быть в 8ми битной кодировке
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2011, 17:10     Юникод в Си++
Еще ссылки по теме:

Вывод юникод символа в консоль C++
Юникод в двоичную систему C++
Юникод и выход из потока вывода C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
16.08.2011, 17:10     Юникод в Си++ #8
Цитата Сообщение от jerdeks Посмотреть сообщение
угу. и это гениально - чтобы работать с юникодом иходник должен быть в 8ми битной кодировке
utf-8 это не юникод. Не совсем юникод. В utf-8 символы могут занимать от 1 до 8(кажется) байт. Чтобы их сохранить производится трансляция юникода в мультибайт.
Чтобы юникод сохранялся в двухбайтном виде (без потери русских букаф), нужно сохранять в utf-16.
Yandex
Объявления
16.08.2011, 17:10     Юникод в Си++
Ответ Создать тему
Опции темы

Текущее время: 15:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru