2014-04-03 43 views
0

所以我已經問了一些關於這個問題的問題,一週後我仍然沒有解決這個問題。如何將字符串轉換爲「Ã」和「Ã|」到「á」和「ã」等正常字符? C++

我正在使用C++而不是(C++ 11),當我在聊天框中鍵入一個單詞時,我以另一種編碼或類似方式接收它:tãpe變成「t?pe」。我強硬的一點是,我可以將所有「a」奇怪的字符組成一個數組,然後轉變爲「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:無法解析的外部符號「公用:類_STL :: basic_string的,類_STL :: allocator> __thiscall kingMobile :: KingChatFilter :: substr(class _STL :: basic_string,class _STL :: allocator>,int)「(?substr @ KingChatFilter @ kingMobile @@ QAE?AV?$ basic_string @ DV?$ char_traits @ D @ _STL @@ V $ $ allocator @ D @ 2 @@ _ STL @@ V34 @ H @ Z)

回答

0

答案依然如此。計算機中的「文本」是一系列字節;它的解釋需要從字節到字符的映射。 ASCII就是這樣的映射,就像Latin-1和UTF-8一樣。因此,tãpe不會變成tãpe。它們分別是查看相同字節的兩種方式,即UTF-8和Latin-1。

此外,您顯示的錯誤不是來自您顯示的代碼。該錯誤顯然來自定義類或名稱空間kingMobile的代碼。刪除。

+0

那麼我該如何處理呢?我應該在代碼或IDE中設置一些東西? – user3481379

+0

@ user3481379:我認爲你已經過了頭。你可能應該首先學習C++基礎 - 編譯正確的文件與UTF-8完全無關 – MSalters

+0

問題是我進入了一個非常大的項目,我不能改變編譯編碼......我不知道該怎麼辦 – user3481379

相關問題