Подтвердить что ты не робот

Конкатенация строк, содержащая арабские и западные символы

Я пытаюсь объединить несколько строк, содержащих как арабские, так и западные символы (смешанные в одной строке). Проблема в том, что результатом является строка, которая, скорее всего, семантически корректна, но отличается от того, что я хочу получить, потому что порядок символов изменяется с помощью двунаправленного алгоритма Unicode. В принципе, я просто хочу объединиться, как будто все они LTR, игнорируя тот факт, что некоторые из них RTL, своего рода "агностическая" конкатенация.

Я не уверен, ясно ли я в своих объяснениях, но я не думаю, что смогу сделать это лучше.

Надеюсь, кто-то может мне помочь.

С уважением,

Карлос Феррейра

BTW, строки получаются из базы данных.

ИЗМЕНИТЬ

enter image description here

Первые 2 строки - это строки, которые я хочу объединить, а третий - результат.

РЕДАКТИРОВАТЬ 2

Собственно, конкатенированная строка немного отличается от той, что изображена на изображении, она была изменена во время копирования + вставки, 1 - после первого A, а не сразу перед вторым A.

4b9b3361

Ответ 1

Вы можете встраивать регионы bidi с помощью кодовых точек управления кодировкой Unicode:

  • Вставка слева направо (U + 202A)
  • Вставка справа налево (U + 202B)
  • Форматирование поп-направления (U + 202C)

Итак, в java, чтобы внедрить RTL-язык, такой как арабский язык на языке LTR, например английский, вы бы сделали

myEnglishString + "\u202B" + myArabicString + "\u202C" + moreEnglish

и сделать обратный

myArabicString + "\u202A" + myEnglishString + "\u202C" + moreArabic

Подробнее см. Двунаправленное общее форматирование или раздел спецификации Unicode в разделе "Коды форматирования форматирования" для исходного материала.

Ответ 2

Очень вероятно, что вам нужно вставить коды форматирования Unicode в строку, чтобы правильно отобразить строку. Подробнее см. Коды направленного форматирования спецификации двунаправленного алгоритма Unicode.

Возможно, класс Bidi может помочь вам в определении правильной последовательности, поскольку он реализует двунаправленный алгоритм Unicode.

Ответ 3

Он не меняет порядок кодовых точек. Что происходит, когда отображается строка, она видит, что строка начинается с права налево script, поэтому она отображает ее справа налево.