从 osx 中的系统操作导入 Qt QString 中的奇怪字符

Weird character imported in Qt QString from a system action in osx

我有一个应用程序可以在某些时候显示打印机信息。

在 mac 上,添加打印机时,默认位置设置为 "me's iMac",除非用户更改它。 (我是用户名)。但是撇号并不完全是撇号...

me’s iMac 

这是它在系统打印机对话框中的显示方式:

当我尝试在我的应用程序中显示位置时 - 使用

QString(pCups->getValue("printer-location", i))

我明白了

我该如何修复这个替换?他们使用特殊字体吗?我有什么方法可以识别它吗?

我在想,如果用户名包含其他特殊字符,它们也可能被系统添加打印机对话框映射到non-UTF-8。我无法控制它...我怎样才能用标准符号找到并修复任何花哨的符号?

OSX 10.6-10.9

edit:现在我只是用那个特定的字符做了一个替换......但我想如果我不做一个更通用的替换,我可能会有其他惊喜所有 non-UTF-8 个花哨的字符

QString(pCups->getValue("printer-location", i)).replace("’", "'");
// this is what it looks like on Windows, though that particular item will only be used on unix (obviously... cups)
QString(pCups->getValue("printer-location", i)).replace("’", "'");

根据 this pageQString 将其 C 风格字符串参数解释为 Latin-1 (ISO-8859-1),而不是 UTF-8。给出的建议是始终使用 QString::fromUtf8() 从 C 风格字符串构造 QStrings

该页面上提到了一个替代方案,但不鼓励您使用它,因为它是一个进程全局设置,因此可能会干扰库等。您可以在应用程序启动的早期调用 QTextCodec::setCodecForCStrings() 传递 UTF-8 文本编解码器 (QTextCodec::codecForName(“UTF-8”))。