Concatenação de cadeias contendo caracteres árabes e ocidentais

Eu estou tentando concatenar várias seqüências de caracteres contendo caracteres árabes e ocidentais (misturados na mesma seqüência de caracteres). O problema é que o resultado é um String que é, muito provavelmente, semanticamente correto, mas diferente do que eu quero obter, porque a ordem dos caracteres é alterada pelo Algoritmo Bidirecional Unicode. Basicamente, eu só quero concatenar como se fossem todos LTR, ignorando o fato de que alguns são RTL, uma espécie de concatenação “agnóstica”.

Não tenho certeza se fui claro na minha explicação, mas acho que não posso fazer melhor.

Espero que alguém possa me ajudar.

Atenciosamente,

Carlos Ferreira

BTW, as seqüências de caracteres estão sendo obtidas do database.

EDITAR

insira a descrição da imagem aqui

As primeiras 2 Strings são as strings que quero concatenar e a terceira é o resultado.

EDIT 2

Na verdade, a String concatenada é um pouco diferente da da imagem, ela foi alterada durante a cópia + pasta, o 1 é depois do primeiro A e não imediatamente antes do segundo A.

Você pode incorporar regiões bidirecionais usando pontos de código de controle de formato unicode:

  • Inclusão da esquerda para a direita (U + 202A)
  • Inclusão da direita para a esquerda (U + 202B)
  • Formatação direcional pop (U + 202C)

Então, em java, para incorporar uma linguagem RTL como o árabe em uma linguagem LTR como o inglês, você faria

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

e fazer o reverso

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

Consulte Formatação Geral Bidirecional para obter mais detalhes ou o capítulo de especificação Unicode em “Códigos de Formatação Direcional” para o material de origem.

É muito provável que você precise inserir códigos de formatação direcionais Unicode em sua string para obter sua exibição de string corretamente. Para obter detalhes, consulte Códigos de Formatação Direcional da especificação do Algoritmo Bidirecional Unicode.

Talvez a class Bidi possa ajudá-lo a determinar a sequência correta, pois implementa o Algoritmo Bidirecional Unicode.

Não está mudando a ordem dos pontos de código. O que está acontecendo é que, quando se trata de exibir a string, ele vê que a string começa com um script da direita para a esquerda, de modo que é exibido da direita para a esquerda.

    Intereting Posts