143

Я и друг шутили насчет Алефа. После попытки набрать א 0 (переключить эти 2 символа) они переключились! Любая последовательность символов не останавливает этот эффект. Почему это!??

Попробуйте набрать их с обратным 0 и א (c & p для א):

א 0

א - 0

א \\\ 0

א -./ 0

Слова однако разделяют их

א foobar 0

Я нахожусь на Arch Linux и еще не проверял это ни на одной другой ОС

РЕДАКТИРОВАТЬ: номер не должен быть нулевым. Работает с цифрами, но не с буквами.

7 ответов7

198

Aleph (U+05D0) - это буква иврита, а иврит пишется справа налево, поэтому Unicode назначает ему двунаправленный класс «справа налево». (Подробнее см. Unicode TR9: Двунаправленный алгоритм .)

Латинские буквы, конечно, "слева направо". Однако ноль (U+0030) находится в двунаправленном классе "European Number", который является слабым классом - в то время как LtR по умолчанию может переключиться на RtL, если перед ним стоит "сильный" символ справа налево. (См. Двунаправленные типы символов и устранение слабых типов в TR9.)

В результате направления до и после меняются местами для всего слова - если вы поставите ноль «до», оно будет отображаться справа; если вы напишите ноль «после», он появится слева.

111

'א', 'HEBREW LETTER ALEF' (U+05D0) имеет класс BIDI (двунаправленный) "справа налево [R]", потому что иврит традиционно пишется справа налево. Цифры, с другой стороны, не имеют определенной направленности, и поэтому весь кусок алеф и ноль интерпретируется как справа налево. В этом случае следующий символ необязательно может быть расположен справа от предыдущего символа, как диктуют довольно сложные двунаправленные правила Unicode.

У вас есть несколько вариантов решения этой проблемы.

  1. Вы можете использовать 'ℵ', 'ALEF SYMBOL' (U+2135). Это символ, имеющий свойство слева направо: ℵ0.

  2. Вместо обычной цифры 0 вы можете использовать символ, подобный нулю, с направлением слева направо, например, «〇», «ИДЕОГРАФИЧЕСКИЙ НУЛЕВЫЙ НОМЕР» (U+3007).

  3. Самый чистый способ - использовать символ «СЛЕВА К ПРАВО» (U+200E) (Википедия) после алефа: «א 0». Это невидимый символ нулевой ширины, который имеет направленность слева направо. Таким образом, он влияет на алгоритм двунаправленного размещения текста так же, как вставка, скажем, латинской буквы слева направо после א, за исключением того, что никакой видимой буквы там не будет.

20

Возможно, лучшим способом добиться этого было бы:

echo -e "\u200F0א"

И обязательная ссылка на xkcd https://xkcd.com/1137/

LTR

14

Иврит написан справа налево - это заставляет алеф-символ переносить информацию, что следующий символ должен быть напечатан слева от него.

Если вы проверите шестнадцатеричный документ (или проведете курсор по тексту с помощью клавиш со стрелками в подходящем редакторе), вы заметите, что сначала вы попадаете в alpeh, а затем в цифру.

Т.е. предположение «следующий символ == символ справа» не выполняется.

14

Вполне возможно иметь ноль впереди, как показано в следующем примере, который был сделан в Notepad++.

Алеф с 0

То, что вы видите, а также становится очевидным, если вы попытаетесь пометить символ в вашем вопросе, это то, что иврит написан справа налево и (так как 0 напрямую связан) текст обрабатывается справа налево (вместо слева) вправо) образом.

См. Второй пример проблемы, с которой столкнулся Firefox (с моей стороны) с четким выбором.

Firefox выбирает текст справа налево

3
א 0 0 א 0-א א -0

Вопрос в том, где вы это делаете, и в реализации. Чтобы получить поведение для чисел на иврите, все символы должны быть направлены справа налево. В HTML/CSS это:

<p style="direction:rtl"> א0 0א 0-א א-0 </p>

В операционной системе иврит и двунаправленность должны быть включены.

Обходные пути, предлагая использование других символов в качестве заменителей, побеждает цель Unicode. Алеф как математический оператор может выглядеть одинаково в некоторых наборах символов, но это совершенно другой символ, чем еврейский алеф, как по контексту, так и по тому, как он будет анализироваться. Например, носитель / компьютер, говорящий на иврите, не будет правильно обрабатывать его, если он используется в сочетании с ивритским словом. Числа и не-альфа-символы являются проблемой, когда они сами не получают ту же кодировку, что и альфа-символы. Таким образом, по иронии судьбы сами числа, по-видимому, должны быть независимыми от набора символов / направленности, принимать любую юникодную направленность предыдущей буквы. Таким образом, в иврите документ - числа становятся «Hebraicized», то есть направленно как иврит. В то время как англо-латинский документ, ивритские буквы могут быть перепутаны и перепутаны из-за отсутствия направленности, приписываемой абзацу.

2

Возможно:

א 0

א - 0

0

א -./ 0

א foobar 0

(Этот ответ не отвечал "почему это так", так как на него уже отвечали другие. Но он отвечает на вопрос в заголовке «невозможно ...?«)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .