我得到一个字符串,如:"aña!a¡a¿a?a"
从服务器所以我解码它,然后我把它传递给一个函数。
我需要对消息做的事情是根据字母加载路径。
我的函数的标题是:void SetInfo(int num, char *descr[4])
所以它接收一个数字和一个由 4 个字符(句子)组成的数组。为了使它更容易,假设我只需要使用descr [0]。
当我调试并到达 SetInfo() 时,我在调试视图中得到了确切的消息:"aña!a¡a¿a?a"
所以直到这里一切正常。最初,我收到的关于该函数的信息是 std::wstring,因此我处理该消息的所有代码都使用 wstrings 和字符串,但现在我收到的是标题中所示的字符。消息到达这里还可以,但是如果我想使用它,那么我不能,因为如果我调试并查看 Descr[0] 的每个位置,那么我会得到
descr[0][0] = 'a'; //ok
descr[0][1] = 'Ã '; // BAD
所以我尝试使用此处找到的代码将 char* 转换为 wchar*:
size_t size = strlen(descr[0]) + 1;
wchar_t* wa = new wchar_t[size];
mbstowcs(wa,descr[0],size);
但随后调试器向我展示了wa
:
wa wchar_t * 0x185d4be8 L"a-\uffffffff刯2e2e牵6365⽳6f73歯6f4c楲6553䈯736f獵6e6f档6946琯7361灭6569湰2e6f琀0067\021ᡰ9740슃b8\020\210=r"
我认为这是不正确的(我想我必须看到相同的初始消息"aña!a¡a¿a?a"
。如果这个消息很好,那么我不知道如何得到我需要的东西......)
所以我的问题是:我怎样才能得到 descr[0][0] = 'a' 和 descr[0][1] = 'ñ' ?我不能将 char 传递给 wchar (你已经看到我得到了什么)。我做错了吗?或者还有其他方法吗?我真的坚持这一点,所以任何想法都会非常感激。
之前,当我使用 wstrings 时(而且效果很好),我正在做这样的事情:
if (word[i]==L'\x00D1' or word[i]==L'\x00F1') // ñ or Ñ
path ="PathOfÑ";
其中 word[i] 在这种情况下与 descr[0][1] 相同,但使用 wstrings。所以我知道这个词[i]是字母'ñ'。也许这有助于理解我在做什么
(顺便说一句......我在 Eclipse 上工作,在 linux 上。)