2011-10-07 32 views
3

我正在寫一個C++應用程序,它使用boost :: asio進行一些http操作。我選擇了boost :: asio,假設它完全符合unicode。但是,我無法在UNICODE中編譯,因爲asio的某些部分被硬編碼爲char。是不是boost :: asio完全符合UNICODE?

案例:

#ifndef TCHAR 
    #ifdef _UNICODE 
     #define TCHAR wchar_t 
    #else 
     #define TCHAR char 
    #endif 
#endif 

// The following lines only complile in MBCS and not in UNICODE. 
boost::asio::basic_streambuf<std::allocator<TCHAR> > request; 
std::basic_ostream<TCHAR, std::char_traits<TCHAR> > requestStream(&request); 

的boost ::支持ASIO :: read_until函數接受字符作爲分隔符。我在這裏做錯了什麼?請注意,我是unicode的新手,從未需要它。

boost :: asio :: basic_streambuf派生自std :: streambuf而不是std :: basic_streambuf,所以我懷疑boost :: asio不是真的符合UNICODE。

+5

'async_read_until'有幾個重載以不同類型作爲分隔符。爲什麼網絡庫需要符合unicode?如果它是unicode並且需要發送2個字節而不是1個字節,那麼這就是應用程序(而不是圖書館)的責任。 – Chad

+0

我正在使用asio進行http操作。我可能需要下載非英文頁面。這就是爲什麼我想要UNICODE。 – Sharath

+1

你不需要 - 甚至不需要 - boost :: asio使用Unicode來將其用於HTTP協議(它也將數據視爲字節流)。相反,請閱讀Unicode編碼,並查看ICU等庫以獲取更高級別的Unicode處理或轉換。 – wjl

回答

0

正確,boost :: asio不符合UNICODE標準。

相關問題