【发布时间】:2015-09-08 10:09:50
【问题描述】:
让我们试着解释一下我的问题。我必须从服务器接收一条消息(在 delphi 中编程),并在客户端(这是我在 c++ 中编程的一侧)用该消息做一些事情。
假设消息是:
"Hello €",这意味着我必须使用std::wstring,因为€(欧元符号)需要 2 个字节而不是 1 个字节,所以知道我已经做了所有我使用 wstrings 工作,如果我设置了消息,它工作正常。现在,我必须从服务器接收真实的,问题来了。服务器端的人将该消息作为字符串发送。他在 delphi 中使用了 EncodeString() 函数,他说他不会改变它。所以我的问题是:如果我在 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
试图总结...问题是我必须接收一条消息并用它做一些事情,使用我说我必须解码它的工具。因此,由于 deDecodeString() 需要一个 char 而我需要一个 wstring,我只需要一种方法来获取服务器接收到的数据,使用 decodeString() 对其进行解码并将其转换为 wstring,但我真的不知道是否有可能,如果是的话,我不确定该怎么做以及使用什么类型的变量来获取它
编辑 3
终于!我知道正在使用哪些代码页。似乎客户端使用 ANSI 的,而服务器没有,所以.. 我必须告诉做那部分的人把它改成 ANSI 的。感谢大家帮助我解决我对代码页存在的巨大无知。
【问题讨论】:
-
听我说,你需要了解一下文本编码。正如你所说,你是新人,你不知道这一点。好吧,我知道你需要知道什么。您需要了解和理解文本编码。这是你的下一个任务。
-
你的
char Text[255];不正是收到的字节消息吗?只需将每个元素打印为int,而不是char。 -
PS - 欧元符号是added in 1998。较旧的代码页(如 437 和 850)不 具有此字符。例如,858 将替换 850,将 ı 替换为 €。您需要确保使用了适当的代码页。
-
另外,从这个开始 - 一个很好的介绍:joelonsoftware.com/articles/Unicode.html
标签: c++ string delphi char wstring