Отображает арабский текст справа налево в PowerShell

Оригинальный текст $text = "مرحبا بك في PowerShell"

Когда я вставил его в PowerShell, порядок текста на арабском языке автоматически изменился на обратный:

Я попытался решить эту проблему с помощью:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

Текст Еще Left-to-Right.
Как установить арабский текст Right-to-Left?


Наконец, я нашел Reverse() такой метод:

$Text  = "مرحبا بكم"
$charA = $Text.ToCharArray()
[array]::Reverse($charA)
-join $charA

Возможно, есть другой метод, более легкий и простой.

даже стрелки вправо и влево в редакторе vscode поменяны местами 🤣

Santiago Squarzon 22.05.2024 16:40

-@SantiagoSquarzon Спасибо за информацию. Но основное использование — в файле ps1. Консоль предназначена только для тестирования.

Oprex Droid 22.05.2024 18:06

В ISE он работает настолько, насколько это того стоит.

js2010 23.05.2024 03:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш симптом подразумевает отсутствие поддержки двунаправленного рендеринга текста в вашем терминальном приложении, которое, судя по скриншоту, является хостом консоли Windows (conhost.exe, который создает обычные отдельные консольные окна).

Поскольку терминал Windows имеет ту же техническую основу, что и хост консоли, на момент написания этой статьи первый, к сожалению, также не имеет такой поддержки.

Популярная сторонняя альтернатива ConEmu также не имеет поддержки.

Даже встраивание явных символов RTL (справа налево), таких как АРАБСКАЯ БУКВА, U+061C, не помогает.

И наоборот, приложения, которые поддерживают двунаправленный текст, автоматически правильно отображают встроенный текст на арабском языке, т. е. RTL; Код Visual Studio является примером.


Ваш обходной путь, включающий перестановку символов, не только громоздок, но и подходит только для вывода на экран, поскольку он включает в себя изменение строковых данных.


Существуют некоторые эмуляторы терминала (приложения), которые уже поддерживают двунаправленный текст, в частности собственный терминал macOS, Terminal.app, и, возможно, некоторые из них доступны в Linux.


Однако, похоже, до сих пор остаются нерешенными фундаментальные вопросы о том, как обрабатывать двунаправленный текст в эмуляторах терминала, как отмечается в вышеупомянутой проблеме ConEmu GitHub:

Кажется, что способ, которым Unicode описывает символы двунаправленной печати текста в правильном порядке, требует предварительного знания полного текста (куска текста). Это не совсем практично для терминала. Поэтапная печать символов может изменить положение ранее напечатанных символов.

Судя по https://www.arabeyes.org/ArabeyesTodo#Terminal_Emulators, никто на самом деле не знает, как двунаправленный текст должен взаимодействовать с различными символами управления терминалом, такими как перемещение/чтение позиции курсора, очистка до конца строки и другие.

Очень подробное объяснение. Большое спасибо.

Oprex Droid 26.05.2024 02:04

Другие вопросы по теме