Codificación de texto QT

Una breve historia del juego de caracteres

  En todo el conjunto de caracteres, puede ser el más famoso el número 7 se llama conjunto de caracteres ASCII del. Es la abreviatura de Código Estándar Americano para el Intercambio de Información (Código Estándar Americano para el Intercambio de Información), el diseño de la comunicación para el Inglés EE.UU.. Se compone de 128 caracteres, incluyendo mayúsculas y minúsculas letras, números 0-9, puntuacion, caracteres no imprimibles (saltos de línea, tabuladores, etc. 4) y un carácter de control (retroceso, zumbido, etc.).

  Sin embargo, desde que se ha diseñado para Inglés, los problemas surgen cuando se trata de lenguas europeas con los números de sonido (con forma de Pinyin chino) de. Por lo tanto, crear un número de 255 caracteres incluyendo ASCII extensión de conjunto de caracteres. Uno de estos juegos de caracteres se refiere a menudo IBM, que está entre el personaje de dibujo y trazado de líneas 128-255, así como algunos caracteres especiales europeos. Otro es el juego de caracteres de 8 bits ISO 8859-1 América 1, también conocida como ISO Latin-1. Se encuentra entre 128-255 caracteres del alfabeto latino para caracteres especiales lenguaje de codificación, de ahí el nombre.

  

formato de código ASCII

El único idioma en idiomas europeos no es un planeta, por lo que Asia y lenguas africanas no deben ser conjuntos de caracteres de 8 bits son compatibles. Sólo Chino (o pictogramas) alfabeto hay más de 80.000 caracteres. Sin embargo, algunos personajes, como el chino, japonés, vietnamita y combinan en diferentes idiomas, los diferentes personajes representan diferentes caracteres, por lo que sólo los caracteres de dos bytes en casi todas las regiones de la tierra pueden ser codificados. Por lo tanto, la creación de un UNICODE de codificación. Se trate de conjunto de caracteres extendidos ISO Latin-1 mediante el aumento de un byte alto, cuando el byte alto es 0, el byte bajo es los caracteres ISO Latin-1. Soporte Unicode Europa, África, Oriente Medio, Asia (incluyendo caracteres pictográficos estándar unificado Corea del sudeste asiático y jeroglíficos). Sin embargo, UNICODE no proporciona soporte para, como Braille, Cherokee, etíope, Khmer, Mongolia, hmong, Tai Lu, Tai Mau texto. Al mismo tiempo, no es compatible con el texto tan antiguo Ahom, el acadio, el arameo, babilónica cuneiforme , Balti, Brahmi, etrusca, hitita, de Java, de Numidia, antiguo persa cuneiforme, Siria y similares.

  Los hechos han demostrado que el uso de caracteres Unicode puede representar en ASCII no es eficiente, porque el UNICODE que el espacio ASCII dos veces más grande, mientras que el byte alto ASCII 0 para ninguna utilidad para él. Para resolver este problema, se han realizado un conjunto de caracteres formato intermedio, se les llama formato universal de transformación, a saber UTF (Universal Transformación del formato). UTF formatos existentes:.. UTF-7, UTF-7.5, UTF-8, UTF-16 y UTF-32. En este artículo se analiza el juego de caracteres UTF-8 básica.

 

 

El contenido de uso QT QString Unicode como la codificación de texto. Sin embargo, un sistema real se utiliza comúnmente en otra codificación, por ejemplo GBK, utf8 similares. Para facilitar la compatibilidad de estos formatos, QT también está provisto de dos tipo de cadena:

QCString Clase: tipo C de cadena, debe terminar en cero, es decir, la cuerda intermedia puede contener, por ejemplo, 0,5 codificado GBK

categorías QByteArray: la cuerda intermedia pueden contener, por ejemplo, 0,5 UTF8 codificada

 

Con el fin de facilitar la conversión de código, QT también han proporciona un transcodificador escalable:

QTextCodec

Esta clase define la interfaz transcodificador puede heredar esta clase con plug-ins, para lograr un transcodificador variedad.

Por supuesto, también construyó QT más transcodificador (sin incluir GBK).

Cuando se utiliza el transcodificador, de las siguientes maneras:

 

1. tr QObject funciones miembro proporcionados en el codificador de posición de inicio del programa (), un programa más tarde pueden ser TR cadena directamente convertida ();

QTextCodec :: setCodecForTr (QTextCodec :: codecForLocale ()); // 或者 codecForName ( "GBK")

... ....

QString str (tr ( "local del texto"));

2. Método toUnicode QTextCodec para mostrar chino

QTextCodec * códec = QTextCodec :: codecForLocale ();

QString a = codec-> toUnicode ( "local del texto");

3. El uso de fromLocal8Bit QString () familia de funciones;

QString str = str.fromLocal8Bit ( "ha");

 

En comparación, el método de interfaz para el procesamiento de texto es bueno, se puede establecer el uso global. Y tr función se puede utilizar para internacional, cuando el software a otros idiomas o versión multi-idioma, simplemente por el archivo qm puede ser muy conveniente.

2 método muy flexible para el procesamiento de cadena codificada en el programa-específica cuando se utiliza por ejemplo para leer el contenido del archivo.

clase Método 3 QString usa meramente por conveniencia, y algunos de la función de paquete de clase toUnicode QTextCodec () realiza. Eficiencia sin duda será peor. Por ejemplo: fromLocal8Bit () es el uso de codeForLocale () decodificador.

 

Los posibles problemas encontrados:

Llamada QTextCodec :: codecForLocale (); no hay problema.

Plugins invocadas en los codecs, por ejemplo, GBK. QTextCodec :: codecForName ( "GBK") no pueden encontrar un decodificador correspondiente, para obtener un puntero nulo.

Esta condición es por lo general cuando se compila QT como una forma compilada librería de enlace estática. Los plugins son necesarios librería de enlace dinámico. En primer lugar comprobar si se ha utilizado plugins compilados, los plugins se colocan en qtXXX / plugins / carpeta arriba. Por ejemplo la versión de depuración de GBK, GB18030, GB2312 decodificador es qtXXX / plugins / codecs / qcncodecsd4.dll.

 

    //app.addLibraryPath(QObject::tr("C://qt-win-opensource-src-4.4.3//plugins ")); // Este código puede ser ejecutado sin añadir normal, si se añade, camino posible para no tener chino

    QTextCodec * códec = QTextCodec :: codecForName ( "GBK");

QString teststr = codec-> toUnicode ( "código GB");

 

 

Además, a fin de que ciertas cadenas (por ejemplo, fragmento de cadena obtenidos de la red) bloque de conversión de codificación, QT también proporciona un ayudante clase QTextDecoder puede ayudar de tales cadenas puede ser decodificado.

QTextCodec * códec = QTextCodec :: codecForName ( "Shift-JIS");

QTextDecoder * decodificador = codec-> makeDecoder ();

 

QString cadena;

while (new_data_available ()) {

     QByteArray trozo = get_new_data ();

     string + = Descodificador> toUnicode (fragmento);

}

 

Este artículo proviene de blog de CSDN, reproduce, por favor indique la fuente: http://blog.csdn.net/catamout/archive/2010/06/17/5675878.aspx

Publicado 15 artículos originales · ganado elogios 2 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/imhikaru/article/details/5984201
Recomendado
Clasificación