如何修复Python中波斯语字母与数字组合的显示混乱问题
解决Windows下Python输出波斯语与数字混合显示混乱问题
问题详情
- 输出异常:波斯语字母与数字组合的文本顺序错乱,例如正确应为
123B456的内容显示为456b123,实际输出示例为۹۷ج۴۶۱۷۷ - 环境限制:仅在**Windows系统(Python 3.6.13)**中出现,Linux平台无此问题
- 涉事代码:
with open("output/mojaz1.csv", "r", newline="", encoding="utf-8") as mojaz: reader = csv.reader(mojaz) mojazha = list(reader) print(mojazha)
解决方案
该问题源于Windows默认控制台对双向文本(BiDi)的渲染缺陷,以下是几种可行的解决方式:
1. 插入Unicode双向控制字符
在混合文本前后添加Unicode控制符,强制终端按正确方向解析文本:
\u200F:强制开启从右到左渲染(适配波斯语)\u200E:重置为从左到右渲染(适配数字)
修改代码如下:
import csv with open("output/mojaz1.csv", "r", newline="", encoding="utf-8") as mojaz: reader = csv.reader(mojaz) mojazha = list(reader) # 对每个含波斯语与数字的元素添加控制符 for row in mojazha: corrected_items = [f'\u200F{item}\u200E' for item in row] print(corrected_items)
2. 更换现代终端
使用Windows Terminal、ConEmu等支持双向文本渲染的终端替代Windows默认控制台,这类终端对右左混合文本的解析逻辑更完善,无需修改代码即可正常显示。
3. 升级Python版本
Python 3.6已停止维护,升级至3.8及以上版本,新版本对Windows平台的Unicode文本处理做了优化,可能直接解决该显示问题。
内容的提问来源于stack exchange,提问作者keyvan doostkam
相关产品推荐
相关产品推荐

