2012-10-23 74 views
2

我有一個字符串輸出,它不一定是有效的utf8。我必須將它傳遞給只接受有效的utf8字符串的方法。
因此,我需要將輸出轉換爲最接近有效的utf8字符串,刪除無效的字節或部分。我怎麼能在C++中做到這一點?我不想使用第三方庫。如何在C++中轉換爲utf8字符串

+2

我覺得這不安全。如果你的字符串不是UTF-8,唯一安全的是完全中止。否則,你會打開自己的攻擊。 –

+1

*無效字節*對您而言意味着什麼?你想要一個有效的utf-8流(可能有無效的代碼點或非感性組合)或有效的unicode utf-8編碼流嗎? –

+0

我需要一個有效的unicode utf-8編碼流...刪除所有無效的東西。 –

回答

2

如果你確定你的字符串是有效的UTF-8只有少數腐敗字節,http://utfcpp.sourceforge.net/可以解決這個問題,您應該使用icu::UnicodeString方法fromUTF8(const StringPiece &utf8)toUTF8String(StringClass &result).

+0

這是一個額外的庫... –

0

。從頁面:

#include "utf8.h" 
void fix_utf8_string(std::string& str) { 
    std::string temp; 
    utf8::replace_invalid(str.begin(), str.end(), back_inserter(temp)); 
    str = temp; 
}

您的要求不使用第三方庫使用Unicode數據打交道時,但UTF8-CPP庫是僅標頭是光,你可以得到幾乎是不可能的。