【发布时间】:2014-08-06 01:32:50
【问题描述】:
我有一个带有特殊符号(捷克变音符号等)的 QString。我想在 Qt 中计算这个字符串的校验和,所以我这样做了:
QString createChecksum(QString str) {
return QString(QCryptographicHash::hash(str.toLatin1(), QCryptographicHash::Md5).toHex());
}
如果我使用 cout 打印 str.toLatin1().data(),我总是得到:
roleadminmanageroperatorservicemanname10password10created16last_login16removable1last_iso_template10last_pcr_template10last_measurement10last_analysis10last_std_curve100�k��1����F������k��1����F������140290845145014029084514500
但是,对于这个字符串,上面提到的代码给出了不同的结果(每个数字对应于一个特定的 createCheckSum 运行):
0x1e42da8 0x1e454a8 0x1e45438 0x1e45378 0x1e41678 0x1e49b58 0x1e49998
当我将字符串放入online md5 tool 时,我总是会得到相同的结果:
6ac41fe9d5338d8aa7f7fb5027e2cdd2
【问题讨论】:
-
您是按原样复制 � 符号,还是使用适当的字符集?
-
是的,我已经“按原样”复制了它们。这些正是我在控制台中看到的或者我粘贴到该校验和生成器的内容
-
您可以尝试将字符串写入文件并使用(好的)文本编辑器查看它。根据您的系统,您的控制台可能不支持 unicode 或 utf8 输出。这至少为您提供了一个更好的比较开始
-
你可以尝试使用不带特殊符号的校验和函数,看看输出是否仍然不同,可能问题出在编码上
-
是的,你是对的,问题在于编码。所以我的问题是如何计算 QString 关于编码的 MD5SUM?