2011-04-06 305 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