【问题标题】:Can I decode € (euro sign) as a char and not as a wstring/wchar?我可以将 €(欧元符号)解码为 char 而不是 wstring/wchar 吗?
【发布时间】:2015-09-08 10:09:50
【问题描述】:

让我们试着解释一下我的问题。我必须从服务器接收一条消息(在 delphi 中编程),并在客户端(这是我在 c++ 中编程的一侧)用该消息做一些事情。

  1. 假设消息是:"Hello €",这意味着我必须使用 std::wstring,因为 (欧元符号)需要 2 个字节而不是 1 个字节,所以知道我已经做了所有我使用 wstrings 工作,如果我设置了消息,它工作正常。现在,我必须从服务器接收真实的,问题来了。

  2. 服务器端的人将该消息作为字符串发送。他在 delphi 中使用了 EncodeString() 函数,他说他不会改变它。所以我的问题是:如果我在 C++ 中将该字符串解码为字符串,然后将其转换为 wstring,它会起作用吗?或者我会遇到问题并在我的字符串 var 上显示其他消息而不是 "Hello €"

  3. 如果是,如果我可以毫无问题地接收该字符串,那么我还有另一个问题。我必须用来解码字符串的函数是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 的。感谢大家帮助我解决我对代码页存在的巨大无知。

【问题讨论】:

标签: c++ string delphi char wstring


【解决方案1】:

由于您使用的是 wstring,我猜您是在 Windows 上(wstring 在 *nix 上并不流行)。

如果是这样,您需要 Delphi 应用程序向您发送 UTF-16,您可以在 wstring 构造函数中使用它。示例:

char* input = "\x0ac\x020"; // UTF-16 encoding for euro sign
wchar_t* input2 = reinterpret_cast<wchar_t*>(input);
wstring ws(input2);

如果你是 Linux/Mac 等,你需要接收 UTF-32。

这种方法远非完美。超过 0xffff(中文等)的 unicode 可能存在缺陷和边缘情况。支持这可能需要博士学位。

【讨论】:

  • 嗯,我不知道 wstring 是用于 Windows 的...。我正在使用 Eclipse 上的 unix 操作系统。我使用 wstring 是因为我之前在使用 € 符号时遇到了另一个问题,并且发现我无法使用 string,但 wstring 是解决方案。我的主要问题是解码它(我还在尝试)
  • wstring 在 * nix 上受支持,它只是不是很流行,因为许多 API 方法将 utf-8(char* 或 std::string)作为输入。但只需请求 Dephi 的人给你 UTF-32 就可以了。
  • 好吧,问题在于,正如我在问题的 cmets 中所说,那个“家伙”拒绝做任何改变,所以我必须看看我是否可以通过任何方式完成这项工作...... . 很多时候我必须证明我已经证明了所有理智和疯狂的方法,让他们知道在他们相信我之前他们必须做出改变:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2014-07-03
相关资源
最近更新 更多