【发布时间】:2012-10-03 14:22:36
【问题描述】:
我想将 QStrings 转换为文件名。因为我希望文件名看起来干净,所以我想用下划线替换所有非字母和非数字。下面的代码应该做到这一点。
#include <iostream>
#include <QString>
QString makeFilename(const QString& title)
{
QString result;
for(QString::const_iterator itr = title.begin(); itr != title.end(); itr++)
result.push_back(itr->isLetterOrNumber()?itr->toLower():'_');
return result;
}
int main()
{
QString str = "§";
std::cout << makeFilename(str).toAscii().data() << std::endl;
}
但是,在我的电脑上,这不起作用,我得到一个输出:
�_
寻找解释,调试告诉我QString("§").size() = 2 > 1 = QString("a").size()。
我的问题:
- 为什么 QString 使用 2 个 QChars 表示“§”? (已解决)
- 您有
makeFilename的解决方案吗?它也适用于中国人吗?
【问题讨论】:
-
最有可能的是,您正在查看字符串的 UTF-8 编码——“§”在 UTF-8 中使用 2 个字节
-
注意:我使用现代 Linux 和 g++。我猜它已经是 UTF-8,虽然我不确定。事实上,strlen("§") 返回 2。
标签: c++ string unicode qstring qchar