QTextCodec Class▲
-
Header: QTextCodec
-
CMake:
find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
-
qmake: QT += core5compat
-
Inherited By:
-
Group: QTextCodec is part of i18n
Detailed Description▲
Qt uses Unicode to store, draw and manipulate strings. In many situations you may wish to deal with data that uses a different encoding. For example, most Japanese documents are still stored in Shift-JIS or ISO 2022-JP, while Russian users often have their documents in KOI8-R or Windows-1251.
Qt provides a set of https:// classes to help with converting non-Unicode formats to and from Unicode. You can also create your own codec classes.
The supported encodings are:
-
https://
-
https://
-
CP949
-
https://
-
https://
-
https://
-
HP-ROMAN8
-
IBM 850
-
IBM 866
-
IBM 874
-
https://
-
ISO 8859-1 to 10
-
ISO 8859-13 to 16
-
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
-
KOI8-R
-
KOI8-U
-
Macintosh
-
https://
-
TIS-620
-
https://
-
UTF-8
-
UTF-16
-
UTF-16BE
-
UTF-16LE
-
UTF-32
-
UTF-32BE
-
UTF-32LE
-
Windows-1250 to 1258
If Qt is compiled with ICU support enabled, most codecs supported by ICU will also be available to the application.
https://s can be used as follows to convert some locally encoded string to Unicode. Suppose you have some string encoded in Russian KOI8-R encoding, and want to convert it to Unicode. The simple way to do it is like this:
QByteArray encodedString = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QString string = codec->toUnicode(encodedString);After this, string holds the text converted to Unicode. Converting a string from Unicode to the local encoding is just as easy:
QString string = "...";
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodedString = codec->fromUnicode(string);Some care must be taken when trying to convert the data in chunks, for example, when receiving it over a network. In such cases it is possible that a multi-byte character will be split over two chunks. At best this might result in the loss of a character and at worst cause the entire conversion to fail.
The approach to use in these situations is to create a QTextDecoder object for the codec and use this QTextDecoder for the whole decoding process, as shown below:
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
QTextDecoder *decoder = codec->makeDecoder();
QString string;
while (new_data_available()) {
QByteArray chunk = get_new_data();
string += decoder->toUnicode(chunk);
}
delete decoder;The QTextDecoder object maintains state between chunks and therefore works correctly even if a multi-byte character is split between chunks.
Creating Your Own Codec Class▲
Support for new text encodings can be added to Qt by creating https:// subclasses.
The pure virtual functions describe the encoder to the system and the coder is used as required in the different text file formats supported by https://, and under X11, for the locale-specific character input and output.
To add support for another encoding to Qt, make a subclass of https:// and implement the functions listed in the table below.
|
Function |
Description |
|---|---|
|
name() |
Returns the official name for the encoding. If the encoding is listed in the http://, the name should be the preferred MIME name for the encoding. |
|
aliases() |
Returns a list of alternative names for the encoding. https:// provides a default implementation that returns an empty list. For example, "ISO-8859-1" has "latin1", "CP819", "IBM819", and "iso-ir-100" as aliases. |
|
mibEnum() |
Return the MIB enum for the encoding if it is listed in the http://. |
|
convertToUnicode() |
Converts an 8-bit character string to Unicode. |
|
convertFromUnicode() |
Converts a Unicode string to an 8-bit character string. |
See Also▲
See also https://, QTextDecoder, QTextEncoder


