Qt字符编码,创建中文文件

1.代码文件本身编码;

2.Qt中用于控制读入和写出文件系统时的字符编码由QTextCodec::setCodecForLocale()所决定。一般不用设置,Qt跟系统交互时会根据系统的Locale来更改传给系统的参数的编码;

//utf8格式    QString str1("你好Hello\r\n");
    QByteArray bLocal = str1.toLocal8Bit(); // 受setCodecForLocale影响,会转换为设定的编码。如果本机不支持指定编码,则会按toLatin1处理
    QByteArray bUtf8 = str1.toUtf8();       // 不受setCodecForLocale影响,强制转换为UTF-8编码
    qDebug() << str1;                       // 正常,Qt会将UTF-16转换为UTF-8输出
    qDebug() << bLocal;                     // 乱码,用UTF-8编码输出GBK字节流
    qDebug() << bUtf8;                      // 正常,用UTF-8编码输出UTF-8字节流

    QString str2 = QString::fromLocal8Bit(bLocal);
    qDebug() << str2;                       // 正常,因为上面显式指定字节流来自本机编码,而bLocal正是本机编码GBK

    QString strTitle("你好Hello");
    QFile file(strTitle);
    if(!file.open(QIODevice::WriteOnly|QIODevice::Append))
        return false;

    file.write(QString::fromUtf8("你好啊Hello测试中\r\n").toLocal8Bit());
    file.write(bUtf8);
    file.write(bLocal);
    file.write("1122测试中\r\n");
    file.write(QString::fromUtf8("你好啊Hello\r\n").toLocal8Bit());
    file.close();//gbk格式  
 QString str1=QString::fromLocal8Bit("你好Hello\r\n");
    QByteArray bLocal = str1.toLocal8Bit(); // 受setCodecForLocale影响,会转换为设定的编码。如果本机不支持指定编码,则会按toLatin1处理
    QByteArray bUtf8 = str1.toUtf8();       // 不受setCodecForLocale影响,强制转换为UTF-8编码
    qDebug() << str1;                       // 正常,Qt会将UTF-16转换为UTF-8输出
    qDebug() << bLocal;                     // 乱码,用UTF-8编码输出GBK字节流
    qDebug() << bUtf8;                      // 正常,用UTF-8编码输出UTF-8字节流

    QString str2 = QString::fromLocal8Bit(bLocal);
    qDebug() << str2;                       // 正常,因为上面显式指定字节流来自本机编码,而bLocal正是本机编码GBK

    QString strTitle=QString::fromLocal8Bit("你好Hello");
    QFile file(strTitle);
    if(!file.open(QIODevice::WriteOnly|QIODevice::Append))
        return false;

    file.write(QString::fromLocal8Bit("你好啊Hello测试中\r\n").toLocal8Bit());
    file.write(bUtf8);
    file.write(bLocal);
    file.write("1122测试中\r\n");
    file.write(QString::fromLocal8Bit("你好啊Hello\r\n").toLocal8Bit());
    file.close();

  

 

原文地址:https://www.cnblogs.com/karltong/p/9408819.html

时间: 2024-11-09 17:57:49

Qt字符编码,创建中文文件的相关文章

Python自动化开发课堂笔记【Day03】 - Python基础(字符编码使用,文件处理,函数)

字符编码使用 1. 文本编辑器如何存取文件 文本编辑器相当一个运行在内存中的进程,所以文件内容在编辑未存储时都是在内存中的,尚未存储在硬盘之中,在没有保存之前,所编辑的任何文本都只是一堆字符,没有任何逻辑上的意义,当存储文件的时候需要以一定的编码格式存储于硬盘之中,当进行文件读取的时候也需要以同样的编码格式进行读取到内存之中进行操作,如果存储文件的编码和读取文件的编码不一致则会引起读取过程中的乱码导致文件操作失败. P.S. --> Python解释器执行py文件的原理. Step1. Pyth

前端网页、php与mysql数据库字符编码(解决中文等乱码问题)

web开发中经常涉及前端网页——php——mysql之间的数据交互,当数据只有英文时通常不会有什么问题,但一旦涉及中文,三个地方的某一处字符编码不一致(如,网页使用的时gbk而mysql使用utf-8)就有可能导致乱码的出现. (注:关于字符编码请参见百度百科:http://baike.baidu.com/view/1204863.htm?fr=aladdin) 前端网页编码: 通常我们都认为可以通过<head>标签内的<meta>项(如<META http-equiv=&q

字符编码复习与文件基础(二)

1.字符编码 字符与数字的对应关系表 ASCII:能识别英文字符,1Byte=1英文字符 hello 8bit|8bit|8bit|8bit|8bit GBK:汉字与英文字符,2Byte=1中文字符 1Byte=1英文字符 你a好 8bit|8bit|8bit|8bit|8bit 你 1111 1111|1111 1111 首位用来标识中文字符的一部分 0111 1111|0111 1111 英文字符首位是0 在内存编码中保存的是去掉首位进行保存的 Unicode 1.能够兼容万国字符 2.与其

【Android测试】【随笔】在手机里用命令行创建中文文件夹

不知道为啥当时自己写了一段在手机里用命令行创建文件的代码,后来由于需求,新建的文件夹需要用中文表示,因为直观,然后就发现出现诡异的乱码. 尝试了各种的编码格式,最后终于成功了,上图就是各种编码格式出的岔子,第一个为正确的. 好了不多说了,上源码吧 1 public void ShellONECommand(String cmd) 2 { 3 ((MainActivity)mainContext).ThreadUpdateLogToUI( "RunShell: " + cmd, Comm

今日知识回顾: 一、运行程序的三个核心硬件及计算机系统 二、Python解释器运行一个.py文件步骤 三、字符编码 四、文件处理

"""文件打开的模式 r 只读模式 w 只写模式 a 追加写模式操作文件单位的方式 t 文本文件 t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码 b 二进制 一定不能指定encoding参数"""# mode参数 可以不写 不写的话默认是rt 只读的文本文件 这个t不写默认就是t# with open(r'D:\Python项目\day07\a.txt',mode='r',encoding='utf-8') as

[Xcode10 实际操作]七、文件与数据-(9)编码创建Plist文件(属性列表文件)

本文将演示如何通过编码的方式,创建属性列表文件. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from

python字符编码显示中文

默认linux下, >>> str1=u'中文' >>> str2='中文' >>> str1,str2 (u'\u4e2d\u6587', '\xe4\xb8\xad\xe6\x96\x87') windows下:(u'\u4e2d\u6587','\xd6\xd0\xce\xc4') 从这点可看出,windows终端默认是gb2312,linux终端默认是utf-8 >>> str1.encode('utf-8') '\xe4\x

QT字符转换,中文乱码等随笔记录

1.把QString转换为 double,float,int等类型 bool ok; double d; double d=QString("1234.56e-02").toDouble(&ok); //ok=true;d;12.3456. float f=str.toFloat(&ok); //转换失败时返回0.0,ok=false; int dec=str.toInt(&ok); Qstring 转换char*问题! 方法一:QString qstr(&qu

Python20期课堂总结-20171209-Python数据类型、字符编码、文件处理

第1章 上节课课程回顾 1.1 安装python解释器 python C:\test.py 1 启动python解释器 2 把文件内容读入内存 3 解释执行 1.2 变量 age=18 id:id(age) type:type(age) value:age is:比较id ==:比较value 强调:id不同,value可以相同 1.3 数据类型 整形int 浮点型float 字符串str 列表list 字典dict 1.4 用户与程序交互 python3 input:把任何输入的内容都存成字符