Имя: Пароль:
1C
 
Кириллица по сети во внешней компоненте
,
0 ДНН
 
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*
Что не так? Как кириллицу получить?
1 DJ Anthon
 
06.04.21
22:18
“ ¬Ґ­п ўбҐ ­®а¬ «м­® ЇаЁе®¤Ёв, Їа®Ў«Ґ¬л ­  ў иҐ© бв®а®­Ґ
2 acht
 
06.04.21
22:30
(0) А ты вообще в каких единицах память выделяешь и считаешь?
Сходи на MSDN или на StackOverflow, посмотри примеры использования.
3 vde69
 
06.04.21
22:33
UTF-8 это 2 байта на 1 символ
4 acht
 
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));
6 acht
 
06.04.21
23:02
Что изменилось со времени Кириллица во внешней компоненте ?
7 ДНН
 
06.04.21
23:17
(6) с того клиента кириллица приходит как надо. С этой задачей это не связано
8 ДНН
 
06.04.21
23:17
Тогда наверно проблема на стороне отправки сообщения, а не в ВК
9 spectre1978
 
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
Разобрался, всем спасибо. Опять не указал кодировку при отправке данных. Ответ был в моей же теме примерно полгода назад
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn