QByteArray编码
时间: 2025-01-02 07:38:41 浏览: 6
### QByteArray 的编码方式及操作
#### 使用 `toLatin1()` 方法
`QByteArray` 可以通过调用 `QString::toLatin1()` 将字符串转换为 Latin-1 编码的字节数组。此方法适用于仅包含 ASCII 或 ISO/IEC 8859-1 字符的数据。
```cpp
QString str = "Hello, Qt!";
QByteArray latin1Bytes = str.toLatin1();
qDebug() << "Latin1 encoded:" << latin1Bytes;
```
#### 使用 `toUtf8()` 和 `fromUtf8()` 方法
对于支持更广泛字符集的应用程序,推荐使用 UTF-8 编码。可以通过 `QString::toUtf8()` 进行编码,并利用 `QString::fromUtf8(QByteArray)` 解码回原始字符串[^1]。
```cpp
// Encoding to UTF-8
QString utfStr = "你好,世界";
QByteArray utf8Bytes = utfStr.toUtf8();
// Decoding from UTF-8 back to QString
QString decodedStr = QString::fromUtf8(utf8Bytes);
qDebug() << "UTF-8 encoded bytes:" << utf8Bytes;
qDebug() << "Decoded string:" << decodedStr;
```
#### 自定义编码器
如果应用程序需要处理特殊编码,则可借助于 QTextCodec 来实现自定义编码方案:
```cpp
#include <QTextCodec>
QString customEncodedString(const QString& input, const char* codecName){
QTextCodec *codec = QTextCodec::codecForName(codecName);
QByteArray encodedData = codec->fromUnicode(input);
return QString::fromLatin1(encodedData);
}
void exampleCustomEncoding(){
QString original = "测试文本";
QString gb18030Encoded = customEncodedString(original, "GB18030");
qDebug() << "Custom (GB18030) Encoded String:" << gb18030Encoded;
}
```
#### 设置和获取编码后的数据长度
当创建固定大小的 `QByteArray` 并手动填充时,可以先调整其尺寸再逐个赋值给各个元素[^3]。
```cpp
QByteArray fixedSizeBa;
fixedSizeBa.resize(6); // Set size of array
for(int i=0;i<6;++i){
fixedSizeBa[i]='a'+i; // Fill with characters a-f
}
qDebug()<<fixedSizeBa.data(); // Output: abcdef
```
阅读全文