【问题标题】:Which one to use, utf8 or Ascii使用哪一个,utf8 或 Ascii
【发布时间】:2012-04-28 07:15:00
【问题描述】:

使用 Qt 做了很多工作,但它让我很受打击,我应该使用哪一个来将我的 QStrings 转换为 QByteArray 并返回?还有一些其他问题我不知道该怎么做。

例如在处理 QUrl 时。我有一个对象,其中成员之一是 QString,我将其设置如下:

blobByType->setBlobAbsoluteUri(request.url().toEncoded());

toEncoded() 将其转换为 utf8,然后将所有非 ASCII 字符进行百分比编码。然后,当我将 QString 设置为 QByteArray 时,它会自动将其转换为 Ascii。

另外,当我从 QString 转换到 QByteArray 时,我目前使用 toUtf8()。

我的问题是,从 QString 转换为 QByteArray 时应该使用什么,反之亦然?

【问题讨论】:

  • 你没有说你打算用这个QByteArray做什么,或者你打算在里面存储什么样的字符串。
  • 在处理一些需要 char 数组的库和一些函数时需要 qbytearray。使用 QString
  • 好的,那么这些库和函数接受什么?他们期待 UTF-8,还是只接受 ASCII?还是他们完全接受其他东西,比如 Latin-1 之类的?
  • 实际上不知道说实话。我将 utf8 用于 base64 编码 lib atm,我生成的密钥似乎有效
  • Base64 使用 ASCII。当然,任何 ASCII 字符串也是 UTF8,所以这并不重要。

标签: c++ qt utf-8 ascii


【解决方案1】:

UTF-8 和 ASCII 在处理英文字符时通常是完全一样的。不同之处在于,如果您曾经使用非英文字符,UTF-8 将能够支持它,而 ASCII 则不会。为了安全起见,我建议使用 UTF-8。

【讨论】:

【解决方案2】:

如果您有机会使用非英文字符,最好使用 UTF-8。使用它是标准且良好的做法,因为您永远不知道将来谁可能会重用您的代码。

【讨论】:

  • 那么我应该改变 QString() 转换 QBYteArray 的方式吗?
  • 我不是 QT 专家。您写道,您正在使用 toUtf8() 进行转换。我了解您已经使用 UTF8。所以我的建议是继续这样做。
  • 如果您担心隐式转换,我建议您定义 QT_NO_CAST_FROM_ASCII 和 QT_NO_CAST_TO_ASCII 以一起禁用它们。然后使用 toUtf8/fromUtf8,QLatin1String() 等进行显式转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2012-01-09
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
相关资源
最近更新 更多