簡體   English   中英

python 如何處理和打印包含 RTL 和 LTR 語言的字符串?

[英]How does python handle and print strings that contains RTL and LTR languages?

我一直在搜索 web 並向人們詢問這個主題,但我真的沒有得到令人滿意的答案,讓我在這里用 python 解釋我的問題。

假設我有這個字符串:

a = 'حصل طالب على (80) في (something) واجتاز الشرط بنجاح'

上面的字符串實際上應該如下所示:

b = 'واجتاز الشرط بنجاح (something) حصل طالب على (80) في'

因為它開始於( حصل )並結束於( بنجاح

請記住,變量a的內容是按順序正確寫入的,但是 python SADLY會按它看到的那樣打印,所以 output 將是不正確的,盡管寫入是正確的,當 ( (something) ) 進入字符串時它被翻轉了,所以變量b內容是一種使文本具有正確形狀的解決方法,盡管它被錯誤地寫入並且不是按照應該寫入的順序!

現在,你可能會說“如果你找到了讓它工作的方法,那你在喋喋不休? python 比“python 打印它所看到的” python 在嘗試打印雙向字符串時實際上表現得非常奇怪,它實際上是在字符串周圍跳躍以打印它,它沒有起點和終點點(意思是從右到左或從左到右打印)讓我們以變量b字符串為例:

而不是從右邊打印字符串作為起點到左邊作為結束點(應該是這樣),

Z23EEEB4347BDD26BFC6B7EE9A3B7555DDZ將首先打印(((某種))),然后( (某物) )第二,然后((某種)),然后( حص書)將(80)三分之一和最終的字符串打印(80)和最終的字符串(80)فف(80)。 ) 這會給您一種錯覺,即 python 如您所見(從右到左)打印了您的字符串

現在您了解了整個情況,我將告訴您我需要 python 做什么,即按照 java 的順序打印字符串,使用變量a這是正確的寫入變量,但正如我上面解釋的,Z23EEEB4347BDD755BFC6B7EEA足夠聰明地去做它應該做的事情(java知道你從哪里開始你的字符串和你在哪里結束它,它使用這兩點來打印你的字符串令人驚訝的真實和正確)。

請幫忙:)

這不是 Python 問題,而是 shell 終端問題。

要么使用:

  • 支持Unicode雙向&整形的終端仿真器
  • 或使用 python 庫,如 FreeBidi(Bidi + 基本整形)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM