Qt:QString中的Unicodes/Utf-8在控制器上显示永远需要(12分钟)

Qt:QString中的Unicodes/Utf-8在控制器上显示永远需要(12分钟),qt,unicode,utf-8,qstring,thai,Qt,Unicode,Utf 8,Qstring,Thai,我正在用Qt在Eclipse/Linux中开发一个多语言应用程序。在泰语中,换行符在我的控制器上似乎没有得到很好的支持(我仍然不知道为什么)。无论如何,以下算法在每个泰国字符之间插入一个零宽度空格(\u200b)(字符及其重音之间除外),因此可能会出现换行。但是,我的控制器现在用泰语启动需要12分钟(在显示开始的QString消息之前需要12分钟)。该函数重写QTranslator::translatefromqt,因此我可以在每个已翻译的QString中添加零宽度的空格 我的问题如下:你们能告

我正在用Qt在Eclipse/Linux中开发一个多语言应用程序。在泰语中,换行符在我的控制器上似乎没有得到很好的支持(我仍然不知道为什么)。无论如何,以下算法在每个泰国字符之间插入一个零宽度空格(\u200b)(字符及其重音之间除外),因此可能会出现换行。但是,我的控制器现在用泰语启动需要12分钟(在显示开始的QString消息之前需要12分钟)。该函数重写QTranslator::translatefromqt,因此我可以在每个已翻译的QString中添加零宽度的空格

我的问题如下:你们能告诉我在QString中是否正确地处理Unicode和Utf-8字符吗?编辑:泰语符号的渲染是Qt问题吗?非常感谢

QString EditTranslation::translate(const char *context, const char *sourceText, const char *disambiguation) const{


QString translatedString = QTranslator::translate(context,  sourceText,  disambiguation);

if (SystemSettingsService->getLanguageType() != ISystemSettingsService::Thai )
    return translatedString;

// Important block starts here********************* 

QString translatedStringModified;

for(QString::const_iterator i(translatedString.begin()); i != translatedString.end(); ++i){

   translatedStringModified.append(i->unicode());

   int unicode = (i+1)->unicode();

   if(((unicode > 3584 && unicode < 3634 && unicode != 3633) || (unicode > 3646 && unicode < 3655) || (unicode > 3662 && unicode < 3676))){

           translatedStringModified.append(QString::fromUtf8("\u200b")); // Zero-width space is added
   }

}

// ************************************

return translatedStringModified;
}
QString EditTranslation::translate(常量字符*上下文,常量字符*源文本,常量字符*消歧)常量{
QString translatedString=QTranslator::translate(上下文、源文本、消歧);
if(SystemSettingsService->getLanguageType()!=IsSystemSettingsService::Thai)
返回translatedString;
//重要区块从这里开始*********************
QString translatedStringModified;
for(QString::const_迭代器i(translatedString.begin());i!=translatedString.end();++i){
translatedStringModified.append(i->unicode());
int unicode=(i+1)->unicode();
如果((unicode>3584&&unicode<3634&&unicode!=3633)| |(unicode>3646&&unicode<3655)| |(unicode>3662&&unicode<3676))){
translatedStringModified.append(QString::fromUtf8(“\u200b”);//添加了零宽度空间
}
}
// ************************************
返回translatedStringModified;
}

在泰语中,空格用于段落之间,而不是单词之间;这就是你原来的问题中断线很差的原因

为了正确地解决这个问题,你应该使用一种算法来寻找单词之间的边界;比如在,;在那里插入破折号,而不是在辅音之间任意插入

在每个辅音之间插入一个空格可能是发音缓慢的原因之一

同时,你使用的范围是错误的:你不应该在前一个元音后打断。此代码段应该为您清除它:

int current = i->unicode();
int next = (i+1)->unicode();

if( (((next >= 0xE31) && (next <= 0xE34)) || ((next >= 0xE47) && (next <= 0xE4E))) || ((current >= 0xE40) && (current <= 0xE46)) )
{
  // Don't insert space
}
else
{
  // Insert space
}
intcurrent=i->unicode();
int next=(i+1)->unicode();

如果(((next>=0xE31)&&&&(next=0xE47)&&&&(next=0xE40)&&&(当前)哪一行代码占用的时间最长?您的探查器显示了什么?这十二分钟花在哪里?大约三分钟花在QWidget adjustSize()函数上(应用于已翻译的QString),另外三分钟花在layout setWidget()上函数。我不确定剩下的六分钟是多少…谢谢你的回答!我同意使用libthai这样的库来查找单词边界是个好主意,而且它可能会降低应用程序的速度,因为插入的零宽度空间会更少。但是,这并没有改变这样一个事实,即它不应该e 12分钟打印出这样一个Q字符串。此外,如果我将我的算法应用于英语/法语/日语/Q字符串,它会正常工作。我想知道泰国符号的呈现是否是Qt问题?我想说,在Qt中泰语字母的呈现不是问题。事实上,你正在尝试破解一个问题,你不知道算法是什么Qt中用于断行的rithm是,并且存在一个不幸的交互。也许你可以让你的翻译人员插入空格来分割长短语或使用较少的文本版本?如果你不能更改方法,请在Qt错误跟踪器上报告问题。谢谢你的帮助!我会在Qt错误跟踪器上报告问题。我会的即使我在每个泰语字符之间插入空格或拉丁字符,也不会花那么长时间。例如,在英语中,我也不知道分解行的算法是什么,如果我测试它,我的算法工作正常。