Вход | Регистрация
 

Кириллица по сети во внешней компоненте

Кириллица по сети во внешней компоненте
Я
   ДНН
 
06.04.21 - 22:03
Есть внешняя компонента на С++, которая принимает данные по сети. Данные приходят в кодировке UTF-8. Латиница передается корректно, а кириллица приходит кракозябрами.

Код получения данных:
wchar_t* data
char* packet_data;
packet_data = (char*)malloc(MaxSizeOfPacket * sizeof(char));

sockaddr_in from;
int fromLength = sizeof(from);

int received_bytes = recvfrom(handle, packet_data, MaxSizeOfPacket, 0, (sockaddr*)&from, &fromLength);

if (received_bytes == SOCKET_ERROR)
{
    data = L"";
}
else
{
    mbstowcs(data, packet_data, MaxSizeOfPacket);
}

free(packet_data);

То есть recvfrom получает char*, а потом mbstowcs переводит их в wchar_t*
Что не так? Как кириллицу получить?
   DJ Anthon
 
1 - 06.04.21 - 22:18
“ ¬Ґ­п ўбҐ ­®а¬ «м­® ЇаЁе®¤Ёв, Їа®Ў«Ґ¬л ­  ў иҐ© бв®а®­Ґ
   acht
 
2 - 06.04.21 - 22:30
(0) А ты вообще в каких единицах память выделяешь и считаешь?
Сходи на MSDN или на StackOverflow, посмотри примеры использования.
   vde69
 
3 - 06.04.21 - 22:33
UTF-8 это 2 байта на 1 символ
   acht
 
4 - 06.04.21 - 22:48
(3) UTF-8, это от 1 байта до 6. Не смущай народ.
   ДНН
 
5 - 06.04.21 - 22:51
(4) от 1 до 4
для переменной Data выделяю так 
Data = (wchar_t*)malloc(MaxSizeOfPacket * sizeof(wchar_t));
   acht
 
6 - 06.04.21 - 23:02
Что изменилось со времени Кириллица во внешней компоненте ?
   ДНН
 
7 - 06.04.21 - 23:17
(6) с того клиента кириллица приходит как надо. С этой задачей это не связано
   ДНН
 
8 - 06.04.21 - 23:17
Тогда наверно проблема на стороне отправки сообщения, а не в ВК
   spectre1978
 
9 - 07.04.21 - 07:14
А не может быть такого, что вы не совсем верно определяете кодировку? Например, что в реальности у вас utf-16 le, а не utf-8.
   Кирпич
 
10 - 07.04.21 - 07:44
Там же локаль нужно как то определить. Как функция узнает, как закодирована входная строка.
   Кирпич
 
11 - 07.04.21 - 07:45
   ДНН
 
12 - 07.04.21 - 07:56
Разобрался, всем спасибо. Опять не указал кодировку при отправке данных. Ответ был в моей же теме примерно полгода назад

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.