C++ 从osx中的系统操作导入Qt QString中的奇怪字符
我有一个应用程序,在某些时候显示打印机信息 在mac上,添加打印机时,默认位置设置为“我的iMac”,除非用户更改它。(我是用户名)。但是撇号不是一个完全的撇号C++ 从osx中的系统操作导入Qt QString中的奇怪字符,c++,string,macos,qt,fonts,C++,String,Macos,Qt,Fonts,我有一个应用程序,在某些时候显示打印机信息 在mac上,添加打印机时,默认位置设置为“我的iMac”,除非用户更改它。(我是用户名)。但是撇号不是一个完全的撇号 me’s iMac 这是它在“系统打印机”对话框中的显示方式: 当我尝试在我的应用程序中显示位置时-使用 QString(pCups->getValue("printer-location", i)) 我明白了 我如何修复此替换?他们使用的是特殊字体吗?有什么办法我能认出它吗 我认为,如果用户名包含其他特殊字符,它们也
me’s iMac
这是它在“系统打印机”对话框中的显示方式:
当我尝试在我的应用程序中显示位置时-使用
QString(pCups->getValue("printer-location", i))
我明白了
我如何修复此替换?他们使用的是特殊字体吗?有什么办法我能认出它吗
我认为,如果用户名包含其他特殊字符,它们也可以通过系统添加打印机对话框映射到非UTF-8字符。我无法控制它。。。我怎样才能找到并用标准符号修复任何花哨的符号
OSX 10.6-10.9
编辑:目前,我只是用那个特定的字符进行了替换。。。但我想如果我不为所有非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("’", "'");
根据,QString
将其C样式的字符串参数解释为拉丁语-1(ISO-8859-1),而不是UTF-8。建议始终使用QString::fromUtf8()
从C样式字符串构造QString
该页面上有一个备选方案,但不鼓励您使用它,因为它是一个进程全局设置,因此可能会干扰库或类似的设置。您可以在应用程序启动的早期调用
QTextCodec::setcodeforcstrings()
传递UTF-8文本编解码器(QTextCodec::codeforname(“UTF-8”)
)。停止使用虚构的引号,使用ASCII引号(0x27)。怎样?该报价由mac system add打印机插入。我想在我的显示中用常规撇号替换它。现在,我只是简单地做了一个“替换”并复制粘贴在我的代码中的符号。。。但我担心可能会有其他这样的符号,仅仅用一个符号来代替可能是不够的。我甚至不介意用空格替换所有非ASCII字符,只是不知道怎么做。我不使用mac,但要注意双引号和连字符(减号)。“添加打印机”的问题似乎与MS Outlook的问题相同,那就是将ASCII字符替换为超出0-127 ASCII范围的“奇特”字符。好的,我将尝试查找并替换这两个字符。谢谢…什么是pCups
对象?它是否有一个成员函数来指定它应该使用的编码或字符集?我确信Mac API使用Unicode来存储打印机名称。我不知道getValue()
成员函数是否返回UTF-8。我不知道QString
构造函数是否将其参数解释为UTF-8。从中可以看出,QString
在默认情况下不期望使用UTF-8。您应该使用QString::fromUtf8()
或预先设置默认编码。