Sometimes one would want to handle strings which contain characters not included in UTF-8 or the default encoding (set in mule-deploy.properties).
In these scenarios a different encoding which is capable of handling these characters (such as UTF-16 or UTF-32) can be used. To do so the default encoding can be easily changed by making a few modifications according to the type of transformer being used.
Changing Encoding with the Datamapper
When using the datamapper with data such as XML, one can easily choose the encoding by clicking on the settings button in the mapping (this should be set properly for both input and output) :
Changing Encoding when using “simple” transformers
When using transformers such as object-to-string or byte-array-to-string, one would think that setting the “encoding” attribute on the transformer would do the trick:
<byte-array-to-string-transformer doc:name="Byte Array to String" encoding="UTF-16"/>
Unfortunately this doesn’t work, since the current Mule’s behaviour is to use this property just to set the MULE_ENCODING outbound property after the transformation is done. However, instead we should make sure that MULE_ENCODING outbound property is set properly before invoking the transformer. The transformer would then be able to transform the payload correctly for us.
<set-property propertyName="MULE_ENCODING" value="UTF-16" doc:name="Property" /> <byte-array-to-string-transformer doc:name="Byte Array to String"/>