当前位置: 首页 > news >正文

做优化网站注意什么杭州网站建设优化案例

做优化网站注意什么,杭州网站建设优化案例,网站建设维护文档,网络营销软件价格此问题很常见#xff0c;然而网上关于此问题的分析大多不够深刻#xff0c;甚至有错误#xff1b;加之Qt5又更改了一些编码策略#xff0c;而很多文章并未提及版本问题#xff0c;或是就算提了#xff0c;读者也不重视。这些因素很容易让读者产生误导。今日我彻底研究透了… 此问题很常见然而网上关于此问题的分析大多不够深刻甚至有错误加之Qt5又更改了一些编码策略而很多文章并未提及版本问题或是就算提了读者也不重视。这些因素很容易让读者产生误导。今日我彻底研究透了这个问题在此记录。 环境Qt 4.8.7, Qt Creator 4.2.2, MSVC 2015 Qt 4.8.7 MSVC 的中文乱码问题实际上有两层原因。 第一层MSVC 不识别无 BOM 的 UTF-8 Qt Creator 默认源代码文件编码是无BOM的UTF-8而MSVC编译器会误认为这是本地多字节字符集MBCS编码对于简中地区即GBK代码页936。 解决方法1推荐Qt Creator选项—文本编辑器—文件编码—UTF8 BOM——如果编码是UTF8则添加—确定。解决方法2Qt Creator选项—文本编辑器—文件编码—默认编码—GBK—确定。 注意修改以上两种方法提及的设置后Qt Creator并不会自动修改已保存的文件的编码或BOM。我们需要修改一下含中文的文件重新CtrlS保存这样才能将这些设置应用于这些文件。 第二层QString 构造函数默认假定的文本编码不正确 我们代码中的字符串特别是用于测试这个乱码问题的字符串一般都是C样式的即用一对双引号包围的const char []类型字符串字面量如 Hello World 。然而 Qt 里很多函数的参数要求的字符串类型都是 QString我们填入这种C样式字符串时就会有个隐式转换转为QString类型其实也就是QString这个构造函数在帮我们转换 explicit QString::QString(const char* ch) 然而const char*类型只表明了这个字符串是多字节字符集却没指明是哪一种他可能是GBK, UTF-8等等甚至可能是跟咱这边八竿子打不着的西欧语言字符集Latin-1ISO-8859-1。不加声明的话MSVC默认我们的字符串字面量是本地多字节字符集MBCS即GBK编码如下图左侧“标题title”文本所示情况。而如果在这种C样式字符串的引号前加上“u8”二字则MSVC就会认为此字符串是UTF-8编码如下图右侧“文本text”文本所示情况。 MSVC在我们有或没有声明的情况下判断出了此字符串的编码后对此字符串进行编码也就是将它们转换为二进制的字节数据传给QString的构造函数。 注意①即使在上一层问题的解决中我们选择了保留UTF-8加上BOM供MSVC识别以上所述MSVC对C样式字符串的编码的解析方式仍然成立。他不会因为你的源码文件是UTF-8编码就将其中的这种字符串优先视为UTF-8。所以上一层问题你选择了哪种解决方法对这一层问题是没有影响的。 ②“u8”标记只是给MSVC编译器的提示MSVC处理后不管是加了u8还是没加一律变成const char[]这样的字节数组。也就是说有没有u8QString的构造函数是不知道的看不见的。他只知道传进来了一个const char* 类型。 传给QString的构造函数后QString要解码这些二进制数据也就是将它们映射到可显示我们能看懂的字符上。由于这些数据不能体现编码他就要猜。咱当然希望他猜是GBK啦但是事与愿违Qt库毕竟不是中国人写的。他默认猜成西欧语言字符集Latin-1如图这就会导致我们在代码里写了些汉字却显示出一堆拉丁字母甚至音标。这也是为何在没有QString参与的情况下只解决第一层问题就好了例如控制台窗口的std::cout而在需要把const char*转换成QString时就又会出问题。 那么解决思路已经很明显了。要么修改它的设置让他猜成GBK或UTF-8要么明明白白的告诉他我们的字符串是啥编码使用 QString::fromXXX 函数。 解决方法1推荐在 QApplication 对象创建前将“C样式字符串的编码(CodecForCStrings)”设为UTF-8并在每个含中文的字符串字面量的前导引号前加上u8二字如QString str(u8这是中文);。设置“C样式字符串的编码”的方法是在程序的入口点main函数中最开始的位置加上图中这句代码别忘了加头文件 QTextCodec::setCodecForCStrings(QTextCodec::codecForName(UTF-8)); 解决方法2 跟方法1一样修改“C样式字符串的编码”但设为本地多字节字符集MBCS一般是GBK代码中的字符串字面量不加“u8”如QString str(这是中文);。具体方法和上条类似不再赘述但main函数中加的那句代码改为 QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); 解决方法3 在每个字符串字面量的前导引号前加上u8并用 QString::fromUtf8() 包裹如图 解决方法4字符串字面量的前导引号前不加u8并用 QString::fromLocal8Bit() 包裹如图 依次解决以上两层问题后中文就不再乱码了。再次强调本文只针对 Qt 4.8.7 MSVC2015 环境提供问题原理和解决方案Qt5就不一样了说不定微软也会在未来的MSVC中添加对无BOM的UTF-8文件的识别。那时问题的解决将简单很多。 szx0427 作于 2024/07/17
http://www.hkea.cn/news/14300152/

相关文章:

  • 网站免费建站2沧州网站seo
  • 潍坊 开发区网站建设济南工程网站建设
  • 佛山h5模板建站中达世联网站建设
  • 什么网站有题目做网站建设的重点
  • c语言做网站后台服务全国封城名单
  • 户县住房和城乡建设局官方网站广告推广策划
  • 网站技术架构图如何仿制wordpress主题
  • psd简单的网站首页wordpress手机如何登陆
  • wordpress 主题漏洞大庆网站建设优化
  • 高端网站建设软件开发windows优化大师官方免费
  • 刷网站排名 优帮云ai网站大全
  • 周口网站关键词优化网络营销对于个人而言有什么作用
  • 利用帝国软件如何做网站目前最火的大型网络游戏
  • 室内设计网站参考网站 搜索 关键字 description
  • 生活做爰网站自建本地网站服务器wordpress
  • 广州网站建设推广易尚开发公司人事行政经理工作总结及计划
  • 中国做网站知名的公司中国芯片三巨头
  • 网站已改版网站开发和商城的科目
  • django商城网站开发的功能海口网站制作
  • 广东网站建设电话咨询下一页word
  • 霸州网站制作wordpress主题图标乱码
  • 公司官方网站怎么做电子商务网站建设商城网站
  • 网站开发软件 连接SQL数据库无锡建设工程服务中心
  • 网站建设基础考试高端品牌护肤品
  • 汽车最全的网站都江堰市网站建设
  • 上海 网站工作室php网站开发方案
  • 龙岩网站建设要多久杭州app开发公司老铁帮
  • 网站的设计思路范文太原市建设厅官方网站
  • 网站制作 温州每个
  • 龙岗区网站建设哪个公司好企业营销图片