我有一个英语-ASCII /阿拉伯语-Unicode组合字符串,如:
متن
abc
یک
3个Unicode阿拉伯字符+空格+ 3个Asci英文字符+空格+ 2个Unicode阿拉伯字符
UTF8:“ \ xD9 \ x85 \ xD8 \ xAA \ xD9 \ x86 \ x20 \ x31 \ x32 \ x33 \ x20 \ xD9 \ x8C \ xD8 \ xA9”]]
UTF16:“ \ xFEE3 \ xFE98 \ xFEE3 \ x20 \ x31 \ x32 \ x33 \ x20 \ xFBFE \ xFB8F”
对于以上述联合形式显示文本,我的嵌入式设备API接受反向的Unicode阿拉伯语表示形式B。因此,我需要将此字符串重新排序为以下Form:
重新排序的UTF16:“ \ xFB8F \ xFBFE \ x20 \ x31 \ x32 \ x33 \ x20 \ xFEE3 \ xFE98 \ xFEE3”
并将其转换为UTF8演示文稿表格B:
UTF8_FormB:“ \ xef \ xae \ x8f \ xef \ xaf \ xbe \ x20 \ x31 \ x32 \ x33 \ x20 \ xef \ xbb \ xa6 \ xef \ xba \ x98 \ xef \ xbb \ xa3”]
我的问题是关于重新排序的步骤
UTF16:“ \ xFEE3 \ xFE98 \ xFEE3 \ x20 \ x31 \ x32 \ x33 \ x20 \ xFBFE \ xFB8F”
to
重新排序的UTF16:“ \ xFB8F \ xFBFE \ x20 \ x31 \ x32 \ x33 \ x20 \ xFEE3 \ xFE98 \ xFEE3”
我认为我需要使用Fribidi来做到这一点。这就是我使用Fribidi的方式:
uint32_t utf16Str[256] = { 0}; uint32_t reorderedStr[256] = { 0}; uint16_t rawLen = 0; uint16_t utf16Len = 0; FriBidiCharType pbase_dir = FRIBIDI_TYPE_ON; fribidi_boolean stat; stat = fribidi_log2vis( /* input */ utf16Str,//UTF16: "\xFEE3\xFE98\xFEE3\x20\x31\x32\x33\x20\xFBFE\xFB8F" // یک abc متن utf16Len,//10 &pbase_dir, /* output */ reorderedStr,//this must be filled with reordered string. NULL, NULL, NULL);
但是输出与输入完全相同。和Fribidi而不是重新排序只是将输入复制到输出。方法Flags左右有什么问题吗?
我有一个组合的English-Asci /阿拉伯文-Unicode字符串,例如:متنabcی3 Unicode阿拉伯字符+空格+ 3 Asci英文字符+空格+ 2 Unicode阿拉伯字符UTF8:“ \ xD9 \ x85 \ xD8 \ xAA \。 ..
问题出在错误的pbase_dir标志上。使用下面的标志
FriBidiCharType pbase_dir = FRIBIDI_TYPE_RTL;