在 PowerShell 中从右到左显示阿拉伯文本

问题描述 投票:0回答:1

原文是

$text = "مرحبا بك في PowerShell"

当我将其粘贴到 PowerShell 中时,阿拉伯文本顺序自动变为反向:

arab

我尝试用以下方法解决它:

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

文字仍然

Left-to-Right

如何设置阿拉伯文字
Right-to-Left


最后我找到了

Reverse()
这样的方法:

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

也许还有另一种更容易、更简单的方法。

powershell terminal right-to-left
1个回答
0
投票

您的症状意味着您的终端应用程序缺乏双向文本渲染支持,从屏幕截图来看,它是 Windows 控制台主机

conhost.exe
,它创建常规的单独控制台窗口)

因为 Windows Terminal 与控制台主机共享相同的技术基础,不幸的是,截至撰写本文时,前者也缺乏这种支持。

流行的第三方替代品ConEmu也缺乏支持。

即使嵌入显式的 RTL(从右到左)字符,例如阿拉伯字母标记、

U+061C
,也没有有帮助。

相反,支持双向文本的应用程序自动正确显示嵌入的阿拉伯文本,即 RTL; Visual Studio Code 是一个示例。


涉及反转字符的解决方法不仅麻烦,而且仅适用于 display 输出,因为它涉及修改字符串数据。


一些终端模拟(应用程序)已经支持双向文本,特别是本机 macOS 终端 Terminal.app,可能还有一些在 Linux 上可用。


但是,关于如何在终端模拟器中处理双向文本,似乎仍然存在尚未解决的基本问题,正如前述 ConEmu GitHub 问题 所指出的那样:

Unicode 以正确的顺序描述双向文本打印字符的方式似乎需要提前了解全文(文本块)。这对于终端来说不太实用。增量打印字符可以更改先前打印字符的位置。

https://www.arabeyes.org/ArabeyesTodo#Terminal_Emulators 来看,没有人真正知道双向文本应如何与各种终端控制字符交互,例如移动/读取光标位置、清除直到行尾等。

© www.soinside.com 2019 - 2024. All rights reserved.