У меня есть объединенная английская-ASCII / арабская-Unicode строка вроде:
متن
abc
یک
3 Юникод арабский символ + пробел + 3 ASCII английский символ + пробел + 2 Юникод арабский символ
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 Arabic Presentation Form B в обратном порядке. Для этого мне нужно переупорядочить эту строку ниже: Форма:
Переупорядочено 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 "
до
Переупорядочено в UTF16:" \ xFB8F \ xFBFE \ x20 \ x31 \ x32\ x33 \ x20 \ xFEE3 \ xFE98 \ xFEE3 "
Я думаю, мне нужно использовать Фрибиди, чтобы сделать это. Вот как я использую Фрибиди:
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);
Но вывод точно такой же, как и вход. И Фрибиди вместо переупорядочения просто скопировал входные данные на выход. Что-то не так с методом Flags и тому подобным?