Я работаю над рефакторингом некоторого устаревшего кода C ++ для поддержки Unicode, и у меня возникают проблемы, когда _stprintf используется со строкой формата _T («% s% s»), а аргументы: арабский текст (справа налево) ) с последующими цифрами, хранящимися в массиве символов. Вот фрагмент кода:
auto buf = std::make_unique<TCHAR>();
TCHAR Text[]{_T("حبيبيحبيبيحبيب")};
TCHAR Number[]{_T("12345678h90")};
_stprintf(buf.get(), _T("%s %s"), Text, Number);
То, что я получаю в buf, это حبيبيحبيبيحبيب 12345678h90, но я хочу получить содержимое массива Text, за которым следует содержимое массива Number. (Я попытался вставить его сюда, но он автоматически форматировался так же, как это делает _stprintf …).
Я знаю, что причина этого в том, что арабский текст является сильным символьным типом и все числа являются слабыми типами, и у меня есть относительно простое решение — перегрузка _stprintf, проверьте, начинается ли строка параметра цифрами, и добавьте U + 200E \) управляющий персонаж. Тем не менее, я не могу не думать, что может быть более простое решение, о котором я не знаю, как глобальные настройки или что-то в этом роде? Есть ли что-то подобное?
Эти строки, которые передаются в SetWindowText и отображаются в неправильном порядке из-за арабского языка. Моя главная цель — сделать так, чтобы они правильно отображались в пользовательском интерфейсе.
Задача ещё не решена.
Других решений пока нет …