英语和阿拉伯语混合字符串排序不正确 Qt

问题描述 投票:0回答:1

我在 Qt 中有一段代码连接字符串

john جونسون
(جيد جداً)
,但是当我将它们相加时,我得到的答案顺序错误,例如:

john (جيد جداً) جونسون’

c++ qt unicode arabic
1个回答
3
投票

这与Qt无关。这是一个unicode的东西。 Qt 只是添加字符。

出现问题的原因是字符串以 LTR(从左到右)开头,以“jhon”开头,因为它是拉丁字母表中的,但是当您向其中添加阿拉伯语单词时,该单词的第一个字母应该位于是的,因为阿拉伯语是 RTL 脚本。这意味着最后一个字母(由最后一个字节表示)位于左侧。因此,添加第二个字符串的位置是 - 在内存中 - 字符串的末尾。

您向该字符串添加一个阿拉伯字符串,因为阿拉伯语也使用“(”,因此您保持在 RTL 模式。

因此您需要明确标记切换回 LTR:

QString ltr{"\u200e"};
QString a {"john جونسون"};
QString b {"(جيد جداً)"};
std::cout << (a+ltr+b).toStdString()<< std::endl;

这将在中间添加一个“从左到右零宽度字符”,它告诉您,无论显示什么字符串,从该点开始,字符串的末尾再次位于右侧。 (直到再次到达阿拉伯字符。)

© www.soinside.com 2019 - 2024. All rights reserved.