Попробуем объяснить мою проблему. Мне нужно получить сообщение с сервера (запрограммированного в delphi) и сделать некоторые вещи с этим сообщением на стороне клиента (это сторона, которую я программирую на C ++).
Скажем, сообщение:
"Hello €"
, это означает, что мне нужно работать сstd::wstring
, поскольку€
(знак евро) требуется 2 байта вместо 1, поэтому зная, что я выполнил всю свою работу с wstrings, и если я установил сообщение, он работает отлично. Теперь я должен получить настоящий с сервера, и здесь возникает проблема.Человек на стороне сервера отправляет это сообщение в виде строки. Он использует функцию EncodeString () в delphi и говорит, что не собирается ее менять. Итак, мой вопрос: если я декодирую эту строку в строку в C ++, а затем конвертирую ее в строку wstring, это сработает? Или у меня будут проблемы и в моей строке var вместо
"Hello €"
будет другое сообщение.Если да, то если я могу получить эту строку без проблем, то у меня другая проблема. Функция, которую я должен использовать для декодирования строки,
void DecodeString(char *buffer, int length);
поэтому обычно, если вы получаете текст, вы делаете что-то вроде:
char Text[255];
DescodeString(Text, length); // length is a number decoded before
Итак ... могу ли я без проблем его расшифровать и получить в Text
сообщение "Hello €"
? с этим мне просто нужно преобразовать его и получить wstring.
Спасибо
РЕДАКТИРОВАТЬ:
Добавлю еще один пример. Если я знаю, что сервер всегда будет отправлять мне текст длиной не более 30, на сервере они делают что-то вроде:
EncodeByte(lengthText);
EncodeString(text)
а в клиенте вы делаете:
int length;
char myText[30];
DecodeByte(length);
DecodeString(myText,length);
а затем вы можете работать с myText как со строкой в последнее время.
Надеюсь, это поможет еще немного. Прошу прощения за то, что у меня нет дополнительной информации, но я новичок в этой работе и мало что знаю о сервере.
ИЗМЕНИТЬ 2
Попытка резюмировать ... Дело в том, что я должен получить сообщение и что-то с ним сделать, с помощью инструмента, который, как я сказал, я должен его расшифровать. Так как de DecodeString () нужен char, а мне нужна wstring, мне просто нужен способ получить данные, полученные сервером, декодировать их с помощью decodeString () и передать их в wstring, но я действительно не знаю, это возможно, и если это так, я не уверен, как это сделать и какие типы варов используются для его получения
ИЗМЕНИТЬ 3
Наконец-то! Я знаю, какие кодовые страницы используются. Кажется, что клиент использует ANSI, а сервер - нет, так что ... Я должен сказать человеку, который выполняет эту часть, чтобы он изменил его на ANSI. Спасибо всем за помощь в моем большом незнании о существовании кодовых страниц.
char Text[255];
не в точности получено байтовым сообщением? Просто напечатайте каждый элемент какint
, а не какchar
. - person Petr   schedule 08.09.2015char Text[255];
- это переменная, объявленная в .h, поэтому в .cpp я могу использовать функцию decodeString. это еще не полученные данные - person Megasa3   schedule 08.09.2015WideString
(если оно создано в старой версии) илиstring
/UnicodeString
, если сделано в D2009 или новее. Однако возможно, что приложение Delphi отправляет UTF8 (кодировку Unicode) или строку, закодированную с кодовой страницей ANSI, что, как было сказано выше, означает, что вам необходимо знать кодовую страницу, чтобы правильно декодировать ее в строку Unicode wstring. Краткий ответ: спросите разработчиков еще раз, примите только исчерпывающий ответ. И обновите свои Delphi;) - person David   schedule 08.09.2015sizeof(wchar_t)
составляет 4 байта (скорее всего, в Linux / Unix), тогда € занимает 4 байта, исключая заголовок и т. Д. Если он хранится как UTF-8, он занимает 3 байтаE2 82 AC
. Вы можете преобразовать его в 1 байт, если есть однобайтовая кодировка, содержащая этот символ, но это маловероятно и затруднит совместимость с другими приложениями, поскольку все операционные системы уже используют Unicode. - person phuclv   schedule 08.09.2015std:wstring str = L"Hello €";
, то я разбираю евро в поисках буквы за буквой и сравниваю сL'\x20AC
, и это работает (не знаю, может ли это в чем-то помочь). Я получил 20Ac отсюда fileformat.info/info/unicode/char/20ac/index.htm - person Megasa3   schedule 08.09.2015