构造函数QString::QString(const char *str)默认使用fromUtf8(),将str所指的执行字符集从utf-8转码成utf-16。 由上面fromUtf8()可知,QString需要执行字符集编码为utf-8,然后以utf-8进行解码,再编码为utf-16才能获得正确的字符编码。显示中文乱码的原因其实就是QString转码方式与执行字符集不一致。(比如,源字...
std::string s2 = s2.toStdString(); const char* cc = s.c_str(); 上面的代码执行完后,cc打印出来是乱码 1 2 QByteArray ba = s1.toLatin1(); const char* cc = ba.data(); 换成这种方式来转换,cc打出来就正常了 上面就是QString转换为const char*后乱码的解决方案 分类: C++ , QT 好文...
QString使用过程中的乱码问题大致分为两类: 从源代码中直接将中文字符串赋值给QString 由于QString的默认编码格式为unicode(utf-16),而源代码中的字符串编码格式为ANSI(中文系统下为GBK),所以,从const char* 转换到QString需要先做编码转换: QString str_ch_false = "中文"; // 错误 QString str_ch_true1...
QString QTextCodec::toUnicode ( const Char * a , int size, ConverterState * state = 0 ) const Converts a from the encoding of this codec to Unicode, and returns the result in a QString. 把字符串a从codecForCStrings所表示的编码转换到Unicode编码. 前面写的 str("中文"); 出现的乱码, 很...
但是输入中文后发现打印出来的都是问号 上网查了一下这个问题,发现解决此问题有两个方法。 第一个是 先利用QString的toStdString函数转换为string类型,然后再用string类型的tc_str()函数转换为char*.代码如下 运行下查看结果 依旧是乱码 另一个方法是在代码前加入下面几行代码: ...
转成char * : char*arr=str.toStdString.data(); 然而, 首先不谈toStdString没有加括号,正确的是toStdString()。这个代码本身就存在一些问题: const char* 和 char* 并不直接存储字符串中的字符,它们本身而是指针,指向的是一块内存空间,内存空间内才有字符串中的字符。在QString执行toStdString()函数后,返...
代码如下:如果不不设全局的字符集是utf-8,那么网上一般的方法是可以转的。如下程序中 #define DD 1的情况下;但是如果设置了全局的utf-8,再用以前的方法: QByteArrayba=aaa.toLatin1(); constchar*c_str=ba.data(); PS:c_str所指向的内存单元,如果你想长时间使用你应该复制出来,要不可能过数行代码后,你...
const char * str = “我是汉字”; QString a= str; 其实很简单的一个问题,当你需要从窄字符串 char* 转成Unicode的QString字符串的,你需要告诉QString你的这串char* 中究竟是什么编码?GBK、BIG5、Latin-1 一 理想情况就是:将char* 传给QString时,同时告诉QString自己的编码是什么: ...
默认情况(不调用QTextCodec)下,用QString的成员函数如toStdString得到std::string类型的返回值时(也就是以2字节的unicode转单字节的latin-1,内存的数据发生了很大的转变,也就是在这个过程中应该是有转码过程,从unicode到utf-8) QString::QString(const char*)这类可以直接用单字节字符串为参数的构造函数,估计有...
const char * str = "我是汉字";QString a= str;或 char str[] = "我是汉字";QString a= str;明确概念1 源⽂件是有编码的,但是这种纯⽂本⽂件却不会记录⾃⼰采⽤的编码 这个是问题的根源,不妨做个试验,将前⾯的源代码保存成GBK编码,⽤16进制编辑器能看到引号内是ce d2 ca c7 ...