我在 Qt 中有一段代码连接字符串
john جونسون
和 (جيد جداً)
,但是当我将它们相加时,我得到的答案顺序错误,例如:
john (جيد جداً) جونسون’
这与Qt无关。这是一个unicode的东西。 Qt 只是添加字符。
出现问题的原因是字符串以 LTR(从左到右)开头,以“jhon”开头,因为它是拉丁字母表中的,但是当您向其中添加阿拉伯语单词时,该单词的第一个字母应该位于是的,因为阿拉伯语是 RTL 脚本。这意味着最后一个字母(由最后一个字节表示)位于左侧。因此,添加第二个字符串的位置是 - 在内存中 - 字符串的末尾。
您向该字符串添加一个阿拉伯字符串,因为阿拉伯语也使用“(”,因此您保持在 RTL 模式。
因此您需要明确标记切换回 LTR:
QString ltr{"\u200e"};
QString a {"john جونسون"};
QString b {"(جيد جداً)"};
std::cout << (a+ltr+b).toStdString()<< std::endl;
这将在中间添加一个“从左到右零宽度字符”,它告诉您,无论显示什么字符串,从该点开始,字符串的末尾再次位于右侧。 (直到再次到达阿拉伯字符。)