泰语是一种非常特殊的语言。您可以在辅音之后,或者在它的前面,或者它的顶部,或者在它的底部写任何其他语言的元音(总共 32 )(好吧,只是短片)并且长“u”的声音可以在底部,但无论如何......)。
此外,还有其他修饰符(4种音调标记,ga-ran,mai-tai-ku和其他修饰符)可以在已存在的元音上发挥作用!
例如:
ที่ดีที่สุด (the best)
正如您所看到的,如果我尝试使用等宽字体打印它,“实际长度”将是5个字符,但所有UTF-8 strlen例程都会返回11个字符 - 这是完全正确的,但是当打印等宽字体时,我需要知道字符串在屏幕/打印机上使用的“实际空间”。
当然,一个简单的解决方案是列出可以放在单词顶部或底部的所有特殊字符,并将其从总计数中删除。
由于我不确定我能找到所有特殊字符,是否已经有用任何语言编写的例程,以便我可以在Delphi中翻译它?
谢谢
答案 0 :(得分:1)
在C ++中:
/*---------------------------------------------------------------------------*/
/* thai_tcslen */
/*---------------------------------------------------------------------------*/
short thai_tcslen(_TCHAR *buff)
{
short bufpos;
short normal_length;
short thai_length;
thai_length=0;
normal_length = _tcslen(buff);
for (bufpos = 0; bufpos < normal_length; bufpos++) {
if ( *(buff+bufpos) != _T('Ñ')/*mai han na kaad*//*-047*/
&& *(buff+bufpos) != _T('Ô')/*sara ee *//*-044*/
&& *(buff+bufpos) != _T('Õ')/*sara eeeee *//*-043*/
&& *(buff+bufpos) != _T('Ö')/*sara uu *//*-042*/
&& *(buff+bufpos) != _T('×')/*sara uuuuu *//*-041*/
&& *(buff+bufpos) != _T('Ø')/*sara oo *//*-040*/
&& *(buff+bufpos) != _T('Ù')/*sara ooooo *//*-039*/
&& *(buff+bufpos) != _T('ç')/*mai tai khoo *//*-025*/
&& *(buff+bufpos) != _T('è')/*mai aek *//*-024*/
&& *(buff+bufpos) != _T('é')/*mai toe *//*-023*/
&& *(buff+bufpos) != _T('ê')/*mai cha ta wah *//*-022*/
&& *(buff+bufpos) != _T('ë')/*mai tree *//*-021*/
&& *(buff+bufpos) != _T('ì')/*ka ran *//*-020*/
) {
thai_length++;
}
}
return(thai_length);
} /* thai_tcslen */
在VB6中:
Public Function ThaiStringLength(ByRef ThaiString As String) As Long
Dim b As String, noLengthChars(13) As Byte
b = ThaiString
noLengthChars(0) = 209
noLengthChars(1) = 212
noLengthChars(2) = 213
noLengthChars(3) = 214
noLengthChars(4) = 215
noLengthChars(5) = 216
noLengthChars(6) = 217
noLengthChars(7) = 231
noLengthChars(8) = 232
noLengthChars(9) = 233
noLengthChars(10) = 234
noLengthChars(11) = 235
noLengthChars(12) = 236
Dim o As Long
For o = 0 To 12
If InStr(b, Chr(noLengthChars(o))) > 0 Then
b = Replace(b, Chr(noLengthChars(o)), "")
End If
Next
ThaiStringLength = Len(b)
End Function