In C++, and indirectly in Python, Ruby, and PHP, all Ice local APIs are narrow-string based, meaning you could not for example recompile
Properties.ice to get property names and values as wide strings.
Installing a narrow-string converter could cause trouble for these local calls if UTF-8 conversion occurs in the underlying implementation. For example, the
stringToIdentity operation creates an intermediary UTF-8 string. If this string contains characters that are not in your native codeset (as determined by the narrow-string converter), the
stringToIdentity call will fail.
Likewise, when Ice reads properties from a configuration file, it converts the input (UTF-8 characters) into native strings. This conversion can also fail if the native encoding cannot convert some characters.
Most strings in local calls are never problematic because Ice does not perform any conversion, for example:
- adapter names in
- property names and values in
ObjectAdapter::createProxy, where the identity conversion occurs only when the proxy is marshaled
Finally, consider the Slice type
Ice::Context, which is mapped in C++ as a
map<string, string>. The mapping for
Context cannot be changed to
map<wstring, wstring>, therefore you cannot send or receive any context entry that is not in your narrow-string native encoding when a narrow-string converter is installed.