我的代码在 Windows 和 Mac 上运行。现在 QString::fromLocal8bit() 在 Win 上可以正常工作,但不能在 Mac 上处理非拉丁字符(即 CJK 字符)。我查看了源代码,发现在两个平台上 Qt 都会像这样初始化它的编解码器:
localeMapper = QTextCodec::codecForName("System");
在这个函数中执行,Qt在 Win 上使用QWindowsLocalCodec ,而在 Mac 上使用QIconvCodec 。我发现如果我将首选系统语言设置为“中文”,那么函数getMacLocaleName()和getWinLocaleName()分别返回“ zh_CH.lproj ”和“ en_US_POSIX ”(qlocale.cpp)。我想我应该为 iconv 库设置一些东西,这样它就会知道当前的语言环境,并且QString::fromLocal8bit()会正常工作。谁能告诉我如何正确处理所有事情以及 Qt 编解码器的机制是什么?