int Client::run(int, char*[]) { Test::MyObjectPrxPtr proxy = ICE_UNCHECKED_CAST(Test::MyObjectPrx, communicator()->stringToProxy("test:" + getTestEndpoint(communicator(), 0))); char oe = char(0xBD); // A single character in ISO Latin 9 string msg = string("tu me fends le c") + oe + "ur!"; cout << "testing string converter"; if(useLocale) { cout << " (using locale)"; } if(useIconv) { cout << " (using iconv)"; } cout << "... " << flush; wstring wmsg = proxy->widen(msg); test(proxy->narrow(wmsg) == msg); test(wmsg.size() == msg.size()); cout << "ok" << endl; proxy->shutdown(); return EXIT_SUCCESS; }
int main(int argc, char* argv[]) { #ifdef ICE_STATIC_LIBS Ice::registerIceSSL(); #endif Ice::InitializationData initData; initData.properties = Ice::createProperties(argc, argv); string narrowEncoding; string wideEncoding; #ifdef _WIN32 useIconv = false; #else // // Switch to French locale // (we just used the codeset for as default internal code for // stringConverter below) // useLocale = (setlocale(LC_ALL, "fr_FR.ISO8859-15") != 0 || setlocale(LC_ALL, "fr_FR.iso885915@euro") != 0); #endif if(useIconv) { #if defined(__hpux) narrowEncoding = "iso815"; wideEncoding = "ucs4"; #elif defined(_AIX) // Always big-endian narrowEncoding = "ISO8859-15"; if(sizeof(wchar_t) == 4) { wideEncoding = "UTF-32"; } else { wideEncoding = "UTF-16"; } #else narrowEncoding = "ISO8859-15"; if(sizeof(wchar_t) == 4) { # ifdef ICE_BIG_ENDIAN wideEncoding = "UTF-32BE"; # else wideEncoding = "UTF-32LE"; # endif } else { # ifdef ICE_BIG_ENDIAN wideEncoding = "UTF-16BE"; # else wideEncoding = "UTF-16LE"; # endif } #endif } { #ifdef _WIN32 // // 28605 == ISO 8859-15 codepage // setProcessStringConverter(Ice::createWindowsStringConverter(28605)); #else if(useLocale) { setProcessStringConverter(Ice::createIconvStringConverter<char>("")); } else { setProcessStringConverter(Ice::createIconvStringConverter<char>(narrowEncoding)); } setProcessWstringConverter(Ice::createIconvStringConverter<wchar_t>(wideEncoding)); #endif Ice::CommunicatorPtr communicator = Ice::initialize(initData); Test::MyObjectPrxPtr proxy = ICE_UNCHECKED_CAST(Test::MyObjectPrx, communicator->stringToProxy("test:" + getTestEndpoint(communicator, 0))); char oe = char(0xBD); // A single character in ISO Latin 9 string msg = string("tu me fends le c") + oe + "ur!"; cout << "testing string converter"; if(useLocale) { cout << " (using locale)"; } if(useIconv) { cout << " (using iconv)"; } cout << "... " << flush; wstring wmsg = proxy->widen(msg); test(proxy->narrow(wmsg) == msg); test(wmsg.size() == msg.size()); communicator->destroy(); cout << "ok" << endl; } Ice::setProcessStringConverter(ICE_NULLPTR); Ice::setProcessWstringConverter(Ice::createUnicodeWstringConverter()); string propValue = "Ice:createStringConverter"; if(useIconv && !useLocale) { propValue += " iconv=" + narrowEncoding + "," + wideEncoding; } propValue += " windows=28605"; initData.properties->setProperty("Ice.Plugin.IceStringConverter", propValue); Ice::CommunicatorPtr communicator = Ice::initialize(initData); Test::MyObjectPrxPtr proxy = ICE_UNCHECKED_CAST(Test::MyObjectPrx, communicator->stringToProxy("test:" + getTestEndpoint(communicator, 0))); char oe = char(0xBD); // A single character in ISO Latin 9 string msg = string("tu me fends le c") + oe + "ur!"; cout << "testing string converter plug-in"; if(useLocale) { cout << " (using locale)"; } if(useIconv) { cout << " (using iconv)"; } cout << "... " << flush; wstring wmsg = proxy->widen(msg); test(proxy->narrow(wmsg) == msg); test(wmsg.size() == msg.size()); cout << "ok" << endl; proxy->shutdown(); communicator->destroy(); return EXIT_SUCCESS; }