喜欢标题
1. QString和QLatin1String之间有什么区别?
2.何时何地我需要使用其中一个?
3.following:
QString str;
str = "";
str = QLatin1String("");
""
== QLatin1String("")
??
答案 0 :(得分:11)
QString持有unicode。字符串文字“foo”是一个字节序列,可以包含任何编码的文本。将字符串文字分配给QString QString str = "foo"
时,您会隐式地将未定义编码的字节序列转换为保存unicode的QString。 QString(const char *)构造函数假定为ASCII,并且将像您键入QString str = QString::fromAscii("foo")
一样进行转换。如果在源文件中使用非ascii文字(例如,UTF-8中的日语字符串文字),或者从其他地方(文件,套接字等)读取的char *或QByteArray中传递字符数据,则会中断。因此,保持unicode QString世界和字节数组QByteArray / char * world分开并且仅在这两者之间进行明确转换是明智的做法,明确说明要使用哪种编码在这两者之间进行转换。可以定义QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII来强制显式转换(在编写任何类型的解析器时我总是会启用它们)。
现在,要使用显式转换将latin1字符串文字分配给QString变量,可以使用
QString foo = QString::fromLatin1("föö");
或
QString foo = QLatin1String("föö");
两者均声明文字以latin1编码,并允许“编码安全”转换为unicode。 我发现QLatin1String更好阅读,而QLatin1String docs解释了为什么它在某些情况下也会更快。
包装字符串文字,或者在某些情况下QByteArray或char *变量,保存latin1数据进行转换是QLatin1String的主要用途,不会使用QLatin1String作为方法参数,成员变量或临时值(所有QString)。
答案 1 :(得分:0)
QString是基于Unicode的,而QLatin1String是基于US-ASCII / Latin-1的
Unicode是US-ASCII / Latin-1的超级集合。如果您只处理US-ASCII / Latin-1字符,则两者对您来说都是一样的。