[QtCore module]
该持QTextCodec类提供文本编码之间的转换。More…
Types
enum ConversionFlag { DefaultConversion, ConvertInvalidToNull, IgnoreHeader }
class **[ConversionFlags](docs_index.htm)**
class **[ConverterState](docs_index.htm)**
Methods
__init__ (self)
list-of-QByteArray aliases (self)
bool canEncode (self, QString)
QString convertToUnicode (self, str in, ConverterState state)
QByteArray fromUnicode (self, QString uc)
QTextDecoder makeDecoder (self)
QTextDecoder makeDecoder (self, ConversionFlags flags)
QTextEncoder makeEncoder (self)
QTextEncoder makeEncoder (self, ConversionFlags flags)
int mibEnum (self)
QByteArray name (self)
QString toUnicode (self, QByteArray)
QString toUnicode (self, str chars)
QString toUnicode (self, str in, ConverterState state = None)
Static Methods
list-of-QByteArray availableCodecs ()
list-of-int availableMibs ()
QTextCodec codecForCStrings ()
QTextCodec codecForHtml (QByteArray ba)
QTextCodec codecForHtml (QByteArray ba, QTextCodec defaultCodec)
QTextCodec codecForLocale ()
QTextCodec codecForMib (int mib)
QTextCodec codecForName (QByteArray name)
QTextCodec codecForName (str name)
QTextCodec codecForTr ()
QTextCodec codecForUtfText (QByteArray ba)
QTextCodec codecForUtfText (QByteArray ba, QTextCodec defaultCodec)
setCodecForCStrings (QTextCodec c)
setCodecForLocale (QTextCodec c)
setCodecForTr (QTextCodec c)
Detailed Description
该持QTextCodec类提供文本编码之间的转换。
Qt使用Unicode来存储,绘制和操作字符串。在许多情况下,您可能希望处理使用不同的编码数据。例如,大多数日本人的文件仍然存储在按住Shift JIS或ISO 2022-JP ,而俄罗斯用户往往有他们的KOI8-R或Windows - 1251文档。
Qt提供了一系列QTextCodec来控制班,以帮助将非Unicode格式与Unicode的。您也可以创建自己的编解码器类。
支持的编码有:
- Apple Roman
- Big5
- Big5-HKSCS
- CP949
- EUC-JP
- EUC-KR
- GB18030-0
- IBM 850
- IBM 866
- IBM 874
- ISO 2022-JP
- ISO 8859-1 to 10
- ISO 8859-13 to 16
- Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
- JIS X 0201
- JIS X 0208
- KOI8-R
- KOI8-U
- MuleLao-1
- ROMAN8
- Shift-JIS
- TIS-620
- TSCII
- UTF-8
- UTF-16
- UTF-16BE
- UTF-16LE
- UTF-32
- UTF-32BE
- UTF-32LE
- Windows-1250 to 1258
- WINSAMI2
QTextCodecs可以用如下的一些本地编码的字符串转换为Unicode 。假设你有一些字符串编码在俄罗斯KOI8-R编码,并希望将其转换为Unicode 。最简单的方法来做到这一点是这样的:
[QByteArray](docs_qbytearray.html) encodedString = "...";
QTextCodec *codec = QTextCodec.codecForName("KOI8-R");
[QString](docs_qstring.html) string = codec->toUnicode(encodedString);
在此之后,string
保存文本转换为Unicode 。从Unicode转换一个字符串到本地编码是一样简单:
[QString](docs_qstring.html) string = "...";
QTextCodec *codec = QTextCodec.codecForName("KOI8-R");
[QByteArray](docs_qbytearray.html) encodedString = codec->fromUnicode(string);
要读取或写入的文件在各种编码,使用QTextStream其setCodec()功能。请参阅Codecs例如对于QTextCodec来控制的应用程序文件I / O。
尝试将数据通过网络接收它时,在转换块,例如,当一些必须小心。在这种情况下,它可能是一个多字节字符将被分割在两个块。在最好的,这可能导致一个字符的损失和在最坏的情况导致整个转换失败。
在这些情况下使用的方法是创建一个QTextDecoder对象为编解码器和使用该QTextDecoder整个解码过程,如下所示:
QTextCodec *codec = QTextCodec.codecForName("Shift-JIS");
[QTextDecoder](docs_qtextdecoder.html) *decoder = codec->makeDecoder();
[QString](docs_qstring.html) string;
while (new_data_available()) {
[QByteArray](docs_qbytearray.html) chunk = get_new_data();
string += decoder->toUnicode(chunk);
}
delete decoder;
该QTextDecoder对象维护块之间的状态,因此可以正常工作,即使多字节字符分割块之间。
Creating Your Own Codec Class
支持新的文本编码可以通过创建子类QTextCodec来控制被加入到Qt的。
该纯虚函数描述编码器系统和编码器被用作需要在所支持的不同的文本文件格式QTextStream和X11下,为区域设置特定的字符输入和输出。
要添加另一个编码支持Qt的,请QTextCodec来控制的一个子类,并实现下表中列出的功能。
Function | Description |
---|---|
name () |
Returns the official name for the encoding. If the encoding is listed in the IANA character-sets encoding file , the name should be the preferred MIME name for the encoding. |
aliases () |
Returns a list of alternative names for the encoding. QTextCodec 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 IANA character-sets encoding file . |
convertToUnicode () |
Converts an 8-bit character string to Unicode. |
convertFromUnicode () |
Converts a Unicode string to an 8-bit character string. |
您可能会发现它更方便,让您的编解码器类可以作为一个插件,见How to Create Qt Plugins了解详情。
Type Documentation
QTextCodec.ConversionFlag
Constant | Value | Description |
---|---|---|
QTextCodec.DefaultConversion |
0 |
无标志被设置。 |
QTextCodec.ConvertInvalidToNull |
0x80000000 |
如果设置了这个标志,每个无效输入字符输出为一个空字符。 |
QTextCodec.IgnoreHeader |
0x1 |
忽略任何Unicode字节顺序标记,并且不产生任何。 |
该ConversionFlags类型是一个typedef为QFlags\u003cConversionFlag\u003e 。它存储ConversionFlag值的或组合。
Method Documentation
QTextCodec.__init__ (self)
构造一个QTextCodec,并给它最高的优先级。该QTextCodec应始终在堆(即构造new
) 。 Qt可以拥有和应用程序终止时将其删除。
list-of-QByteArray QTextCodec.aliases (self)
子类可以返回一个数字的别名有问题的编解码器。
标准别名编解码器可以在被发现IANA character-sets encoding file。
list-of-QByteArray QTextCodec.availableCodecs ()
返回所有可用的编解码器的列表,按名称。通话QTextCodec.codecForName( ),得到QTextCodec为名称。
该列表可以包含相同的编解码器的许多提到,如果编解码器具有别名。
See also availableMibs( )name()和aliases( ) 。
list-of-int QTextCodec.availableMibs ()
返回的MIB可用于所有硬件编解码器的列表。通话QTextCodec.codecForMib( ),得到QTextCodec对MIB 。
See also availableCodecs()和mibEnum( ) 。
bool QTextCodec.canEncode (self, QString)
返回True如果Unicode字符ch可以使用此编解码器完全编码,否则返回False 。
QTextCodec QTextCodec.codecForCStrings ()
返回所使用的编解码器QString转换为和从const char *
和QByteArrays 。如果这个函数返回0 (默认值) ,QString假定的Latin-1 。
See also setCodecForCStrings( ) 。
QTextCodec QTextCodec.codecForHtml (QByteArray ba)
尝试检测的HTML给定的字节数组中所提供的代码片段的编码,ba通过检查BOM(字节顺序标记)和内容类型的元头,并返回一个QTextCodec例如,它能够将HTML转换为Unicode解码。如果该编解码器不能从所提供的内容检测defaultCodec返回。
此功能被引入Qt的4.4 。
See also codecForUtfText( ) 。
QTextCodec QTextCodec.codecForHtml (QByteArray ba, QTextCodec defaultCodec)
[
这是一个重载函数。
](docs_qtextcodec.html)
尝试检测的HTML给定的字节数组中所提供的代码片段的编码,ba通过检查BOM(字节顺序标记)和内容类型的元头,并返回一个QTextCodec例如,它能够将HTML转换为Unicode解码。如果编解码器不能被检测到,此重载返回的Latin-1QTextCodec。
QTextCodec QTextCodec.codecForLocale ()
[
返回一个指向该编解码器为这个区域设置最合适。
在Windows上,编解码器将根据系统区域设置。在Unix系统中,开始用Qt 4.2 ,编解码器将使用iconv库。请注意,在两种情况下,编解码器的名称将是“系统” 。
](docs_qtextcodec.html)
See also setCodecForLocale( ) 。
QTextCodec QTextCodec.codecForMib (int mib)
返回QTextCodec相匹配的MIBenum mib。
QTextCodec QTextCodec.codecForName (QByteArray name)
搜索所有已安装QTextCodec对象并返回一个最匹配name,与之匹配的是不区分大小写的。返回0 ,如果没有匹配的编解码器的名称name可以找到。
QTextCodec QTextCodec.codecForName (str name)
搜索所有已安装QTextCodec对象并返回一个最匹配name,与之匹配的是不区分大小写的。返回0 ,如果没有匹配的编解码器的名称name可以找到。
QTextCodec QTextCodec.codecForTr ()
返回所使用的编解码器QObject.tr( )在其参数。如果这个函数返回0 (默认值) , TR ()假定的Latin-1 。
See also setCodecForTr( ) 。
QTextCodec QTextCodec.codecForUtfText (QByteArray ba)
尝试检测所提供的代码片段的编码ba通过使用BOM(字节顺序标记) ,并返回一个QTextCodec例如,能够将文本转换为Unicode解码。如果该编解码器不能从所提供的内容检测defaultCodec返回。
此功能被引入Qt的4.6 。
See also codecForHtml( ) 。
QTextCodec QTextCodec.codecForUtfText (QByteArray ba, QTextCodec defaultCodec)
[
这是一个重载函数。
](docs_qtextcodec.html)
尝试检测所提供的代码片段的编码ba通过使用BOM(字节顺序标记) ,并返回一个QTextCodec例如,能够将文本转换为Unicode解码。如果编解码器不能被检测到,此重载返回的Latin-1QTextCodec。
See also codecForHtml( ) 。
QString QTextCodec.convertToUnicode (self, str in, ConverterState state)
这种方法是抽象的,应在任何子类中重新实现。
QTextCodec子类必须重新实现此功能。
将第一len字符chars从子类到Unicode的编码,并返回结果的QString。
state可以是0,在这种情况下的转换是无状态的,因此应该使用默认的转换规则。如果状态不为0 ,编解码器应在转换后保存的状态state,并调整remainingChars和结构的invalidChars成员。
QByteArray QTextCodec.fromUnicode (self, QString uc)
皈依str从Unicode到该编解码器的编码,并返回结果的QByteArray。
QTextDecoder QTextCodec.makeDecoder (self)
创建QTextDecoder存储足够的状态来解码的块char *
数据来创建Unicode数据块。
来电者是负责删除返回的对象。
QTextDecoder QTextCodec.makeDecoder (self, ConversionFlags flags)
创建QTextDecoder用指定的flags要解码的块char *
数据来创建Unicode数据块。
来电者是负责删除返回的对象。
此功能被引入Qt的4.7 。
QTextEncoder QTextCodec.makeEncoder (self)
创建QTextEncoder存储足够的状态以Unicode数据块编码为char *
数据。
来电者是负责删除返回的对象。
QTextEncoder QTextCodec.makeEncoder (self, ConversionFlags flags)
创建QTextEncoder用指定的flags以Unicode数据块编码为char *
数据。
来电者是负责删除返回的对象。
此功能被引入Qt的4.7 。
int QTextCodec.mibEnum (self)
这种方法是抽象的,应在任何子类中重新实现。
的子类QTextCodec必须重新实现此功能。它返回MIBenum (见IANA character-sets encoding file获取更多信息) 。重要的是,每QTextCodec子类将返回此函数的正确独特的价值。
QByteArray QTextCodec.name (self)
[
这种方法是抽象的,应在任何子类中重新实现。
](docs_qbytearray.html)
QTextCodec子类必须重新实现此功能。它返回由子类支持的编码的名称。
如果该编解码器被注册为一个字在设置IANA character-sets encoding file此方法应为如果定义编解码器返回的首选MIME名称,否则其名称。
QTextCodec.setCodecForCStrings (QTextCodec c)
设置使用的编解码器QString转换为和从const char *
和QByteArrays 。如果codec为0 (默认值) ,QString假定的Latin-1 。
Warning:一些编解码器不保留在ASCII范围的字符( 0x00到0x7F ) 。例如,日文Shift- JIS编码的反斜杠字符(为0x5A )映射到日元的性格。为了避免不良的副作用,我们建议避免这种编解码器与setCodecsForCString ( ) 。
Warning:此功能不reentrant。
See also codecForCStrings()和setCodecForTr( ) 。
QTextCodec.setCodecForLocale (QTextCodec c)
编解码器设置为c;这将被返回codecForLocale( ) 。如果c是一个空指针,编解码器被重置为默认值。
这可能需要为那些希望使用自己的机制设置的区域设置一些应用程序。
See also codecForLocale( ) 。
QTextCodec.setCodecForTr (QTextCodec c)
设置使用的编解码器QObject.tr( )在它的参数c。如果c为0 (默认值) , TR ()假定的Latin-1 。
如果在程序中的文字引用的文字是不是在Latin-1编码,此功能可用于设置相应的编码。例如,韩国程序员开发的软件可以使用eucKR程序中的所有文本,在这种情况下, main()函数可能看起来像这样:
int main(int argc, char *argv[])
{
[QApplication](docs_qapplication.html) app(argc, argv);
[QTextCodec](docs_qtextcodec.html).setCodecForTr([QTextCodec](docs_qtextcodec.html).codecForName("eucKR"));
...
}
请注意,这不是个好办法选择的编码,该user已选择。例如,要转换包含英语字符串韩国的应用程序,所有需要的是英文字符串,通过TR ( )和要加载翻译文件传递。对于国际化的详细信息,请参阅Internationalization with Qt。
Warning:此功能不reentrant。
See also codecForTr()和setCodecForCStrings( ) 。
QString QTextCodec.toUnicode (self, QByteArray)
皈依a从这个编解码为Unicode的编码,并返回结果的QString。
QString QTextCodec.toUnicode (self, str chars)
将第一size从人物input从这个编解码为Unicode的编码,并返回结果的QString。
该state所使用的转换器被更新。
QString QTextCodec.toUnicode (self, str in, ConverterState state = None)