如何用“â”和“Ã|”转换字符串像“á”和“ã”这样的普通字符? C ++

时间:2014-04-03 12:48:30

标签: c++ encoding

所以我已经就这个问题提出了一些问题,一周之后我仍然没有解决这个问题。

我正在使用c ++而不是(c ++ 11)而当我在聊天框中输入一个单词时,我正在接收另一种编码或类似的东西:tãpe变成“tãpe”。我强硬的是,我想要制作一个所有“一个”奇怪的角色可以变成“â”等等然后然后变成“a”的阵列,甚至那感觉不对它没有用。

经过大量搜索后,似乎一个多字节字符串试图被单字节字符串或类似字符串引用。

在得到这个搞砸的字符串之前,我无法改变任何东西,因为它来自服务器,我需要使它正确,所以我无法在代码上使用它。

如果有人能帮助我在c ++中转换它,我会很高兴因为我搜索了很多论坛和帖子,而且我没有找到一种方法在c ++上使用它。

非常感谢

我尝试使用此功能,但我收到错误:

std::string substr(std::string originalString, int maxLength)
{
    std::string resultString = originalString;

    int len = 0;
    int byteCount = 0;

    const char* aStr = originalString.c_str();

    while(*aStr)
    {
        if( (*aStr & 0xc0) != 0x80 )
            len += 1;

        if(len>maxLength)
        {
            resultString = resultString.substr(0, byteCount);
            break;
        }
        byteCount++;
        aStr++;
    }

    return resultString;
}

错误是错误LNK2001:未解析的外部符号“public:class _STL :: basic_string,class _STL :: allocator&gt; __thiscall kingMobile :: KingChatFilter :: substr(class _STL :: basic_string,class _STL :: allocator&gt; ,int)“(?substr @ KingChatFilter @ kingMobile @@ QAE?AV?$ basic_string @ DV?$ char_traits @ D @ _STL @@ V?$ allocator @ D @ 2 @@ _ STL @@ V34 @ H @ Z)< / p>

1 个答案:

答案 0 :(得分:0)

答案仍然是一样的。 &#34;文本&#34;在计算机中是一个字节序列;它的解释需要从字节到字符的映射。 ASCII就是这样的映射,就像Latin-1和UTF-8一样。

因此,tãpe不会变成tãpe。它们分别是两种查看相同字节的方式,分别是UTF-8和Latin-1。

此外,您显示的错误并非来自您显示的代码。错误显然来自定义类或命名空间kingMobile的代码。删除它。