zoukankan      html  css  js  c++  java
  • QT中字符串及其编码

    (1)宏 QT_NO_CAST_FROM_ASCII

    与之类似的还有QT_NO_CAST_TO_ASCII 

    任何良好风格源代码或者愿意成为良好风格的源代码,都应该使用该宏。

    该宏的作用在QString的Manual中有介绍:
    Disables automatic conversions from 8-bit strings (char *) to unicode QStrings

    其目的是,强制所有需要转换为Qt字符串的C中的const char*窄字符串都使用:

    QLatin1String(const char*)

    QObject::tr(const char *)
    QString::fromXXXX
    QTextCodec::toUnicode ( const char *)
    ...
    不然将会编译时直接报错,比如 QString val("dbzhang800");   val = "dbzhang801";

    在定义该宏的情况下,直接报错。因为没有 QString(bool) 这样的东西哈。

    注意:字符串指针可能被转换成为bool或其他基本类型,而对于部分类,比如 QScriptValue,是有对应构造函数而不报告编译错误。

     参考 http://blog.csdn.net/dbzhang800/article/details/6675415 

    (2)  MSVC 的转码动作 

    不同的msvc的编译器对源代码的编码有不同处理,这里仅指msvc2008。
    如果源码文件是带BOM的utf8,utf16等编码格式,它会有转码的动作。
    这样一来,tr()包住的字符串将转码成时GBK、BIG5等system编码,与源文件所用的编码不同。

    所以,msvc实际使用的字符和源代码中字符的编码可能不同,并且影响到程序运行setCodecForTr/setCodecForLocale/setCodecForCStrings和lingust翻译等工具

    另外QT4.6中尽管简体中文的windows系统中使用gb2312,应该直接指定SYSTEM而不要指定GB2312 ,从而可以避免使用codecs插件。 

  • 相关阅读:
    基本MVVM 和 ICommand用法举例(转)
    WPF C# 命令的运行机制
    628. Maximum Product of Three Numbers
    605. Can Place Flowers
    581. Shortest Unsorted Continuous Subarray
    152. Maximum Product Subarray
    216. Combination Sum III
    448. Find All Numbers Disappeared in an Array
    268. Missing Number
    414. Third Maximum Number
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/2655547.html
Copyright © 2011-2022 走看看