IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

QTextCodec Class

The https:// class provides conversions between text encodings.

All functions in this class are https://.

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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:

 
Sélectionnez
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:

 
Sélectionnez
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:

 
Sélectionnez
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

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est disponible sous la licence https:// telle que publiée par la Free Software Foundation.