2011-04-06 303 views
1

我希望在Android NDK中創建(std::getline())並操縱UTF-16字符串,以便我可以將它們(相對)無痛地傳遞迴Java以供顯示。目前,我正在使用C++ 0x,使用LOCAL_CPPFLAGS := -std=c++0x開關,它可以工作(我正在使用其他一些0x函數)。似乎編譯器找不到u16string。我已經包含<string>,並且沒有其他錯誤。我希望做一些如:Android中的u16string和char16_t NDK


ifstream file(fileName); 
if(!file.is_open()) { 
    return false; 
} 
while(!file.eof()) { 
    u16string fileLine; 
    std::getline(file, fileLine); 

    // Do stuff with fileLine 
} 
return true; 

NDK是否包含過時的GCC版本?我該怎麼辦?

回答

3

NDK沒有(至少不是正式的)支持寬字符,UTF-16或類似的東西。它也不提供適當的C++庫。

+3

+1:NDK是一個C++庫的歉意藉口 – ognian 2011-04-06 14:39:53

+0

我被告知NDK使用GCC,它在C++ 0x模式下本機支持UTF-16。我想我希望有一些預處理器-fu或者可以做的事情,以便它能夠在該(正式實驗)模式下識別字符串完整的C++ 0x方式 – Warpspace 2011-04-07 03:38:25

+0

@Warpspace NDK(至少我的老年人NDK 4b)帶有gcc-4.4.0,它確實應該支持新的C++ 0x字符類型char16_t和char32_t - 但是它沒有庫支持。 Android NDK甚至不知道std :: string。最簡單的事情可能是使用UTF-8 - JNI支持這兩種方式。否則,您可以使用stlport(無C++ 0x支持)爲您提供std :: string或std :: basic_string,爲char16_t定義/實現char_traits並將自己的u16string定義爲basic_string 。不確定stlport是否支持wchar_t/wstring。 – sstn 2011-04-07 11:55:31