|
Кириллица по сети во внешней компоненте
| ☑ |
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
|
Разобрался, всем спасибо. Опять не указал кодировку при отправке данных. Ответ был в моей же теме примерно полгода назад
|
|