\section{\class{wxEncodingConverter}}\label{wxencodingconverter}
-This class is capable of converting strings between any two
+This class is capable of converting strings between two
8-bit encodings/charsets. It can also convert from/to Unicode (but only
-if you compiled wxWindows with wxUSE\_WCHAR\_T set to 1).
+if you compiled wxWindows with wxUSE\_WCHAR\_T set to 1). Only limited subset
+of encodings in supported by wxEncodingConverter:
+{\tt wxFONTENCODING\_ISO8859\_1..15}, {\tt wxFONTENCODING\_CP1250..1257} and
+{\tt wxFONTENCODING\_KOI8}.
+
+\wxheading{Note}
+
+Please use \helpref{wxMBConv classes}{mbconvclasses} instead
+if possible. \helpref{wxCSConv}{wxcsconv} has much better support for various
+encodings than wxEncodingConverter. wxEncodingConverter is useful only
+if you rely on {\tt wxCONVERT\_SUBSTITUTE} mode of operation (see
+\helpref{Init}{wxencodingconverterinit}).
\wxheading{Derived from}
the class queries \helpref{wxEncodingConverter}{wxencodingconverter}
for "equivalent" encodings (e.g. iso8859-2 and cp1250) and tries them.
-\wxheading{Using wxFontMapper in conjunction with wxEncodingConverter}
+\wxheading{Using wxFontMapper in conjunction with wxMBConv classes}
If you need to display text in encoding which is not available at
host system (see \helpref{IsEncodingAvailable}{wxfontmapperisencodingavailable}),
you may use these two classes to find font in some similar encoding
(see \helpref{GetAltForEncoding}{wxfontmappergetaltforencoding})
and convert the text to this encoding
-(\helpref{wxEncodingConverter::Convert}{wxencodingconverterconvert}).
+(\helpref{wxMBConv classes}{mbconvclasses}).
Following code snippet demonstrates it:
if (wxFontMapper::Get()->GetAltForEncoding(enc, &alternative,
facename, false))
{
- wxEncodingConverter encconv;
- if (!encconv.Init(enc, alternative))
- ...failure...
- else
- text = encconv.Convert(text);
+ wxCSConv convFrom(wxFontMapper::Get()->GetEncodingName(enc));
+ wxCSConv convTo(wxFontMapper::Get()->GetEncodingName(alternative));
+ text = wxString(text.mb_str(convFrom), convTo);
}
else
...failure (or we may try iso8859-1/7bit ASCII)...
\wxheading{Font mapping}
-You can use \helpref{wxEncodingConverter}{wxencodingconverter} and
+You can use \helpref{wxMBConv classes}{mbconvclasses} and
\helpref{wxFontMapper}{wxfontmapper} to display text:
\begin{verbatim}
if (!wxFontMapper::Get()->IsEncodingAvailable(enc, facename))
{
wxFontEncoding alternative;
- if (wxTheFontMapper->GetAltForEncoding(enc, &alternative,
- facename, false))
+ if (wxFontMapper::Get()->GetAltForEncoding(enc, &alternative,
+ facename, false))
{
- wxEncodingConverted encconv;
- if (!encconv.Init(enc, alternative))
- ...failure...
- else
- text = encconv.Convert(text);
+ wxCSConv convFrom(wxFontMapper::Get()->GetEncodingName(enc));
+ wxCSConv convTo(wxFontMapper::Get()->GetEncodingName(alternative));
+ text = wxString(text.mb_str(convFrom), convTo);
}
else
- ...failure...
+ ...failure (or we may try iso8859-1/7bit ASCII)...
}
...display text...
\end{verbatim}
\wxheading{Converting data}
You may want to store all program data (created documents etc.) in
-the same encoding, let's say windows1250. Obviously, the best way would
-be to use \helpref{wxEncodingConverter}{wxencodingconverter}.
+the same encoding, let's say {\tt utf-8}. You can use
+\helpref{wxCSConv}{wxcsconv} class to convert data to encoding used by the
+system your application is running on (see
+\helpref{wxLocale::GetSystemEncoding}{wxlocalegetsystemencoding}).
\wxheading{Help files}
to get some limited support for {\tt wchar\_t} type.
This will allow your program to perform conversions between Unicode strings and
-ANSI ones (\helpref{wxEncodingConverter}{wxencodingconverter} depends on this
-partially) and construct wxString objects from Unicode strings (presumably read
+ANSI ones (using \helpref{wxMBConv classes}{mbconvclasses})
+and construct wxString objects from Unicode strings (presumably read
from some external file or elsewhere).