1

我是 Python 新手,我正在尝试编写一个 Python 脚本,它将文本文件(以特定格式编写)解析为 XML 文件。文本文件是用非欧洲语言编写的,以 UTF-8 编码(从右到左书写),仅此一项就给我带来了一些麻烦。

文本文件格式:

{number}"|"{number}"|" {text in UTF-8}

一个例子是:

   1|2|حمد ހުރީ، عالم ތަކުގެ ވެރި اللَّه އަށެވެ

最初的问题是,当从文本中读取时,单词的顺序在 Python 中被切换了。如果要阅读文本: 1|2| ABC DEF,Python 会将其显示为 1|2| DEF ABC 这显然是不正确的。

我正在使用file = open("text.txt")并运行readlines()它来获取文本。

为了解决这个错误,我尝试split()将单词分开并将它们放入列表中,然后根据需要重新排序,但在这种情况下,可能存在转换错误并且我收到垃圾字符。将此类 UTF-8 字符存储到 Python 列表中并检索它们存在问题;字符没有被保留。

如果这个列表处理错误得到修复,那么编写 XML 文件应该是小菜一碟。

编辑:如果有帮助,语言是 Dhivehi,字母表是 Thaana。

4

1 回答 1

2

Python 在内部只支持很差的 BIDI 渲染。也就是说,它没有完全实现Unicode Bidirectional Algorithm

但是,除非您直接在 Python 中进行文本布局,否则这无关紧要。对于您所描述的项目(读取带有一些 BIDI 文本的文件并输出具有相同文本的另一个文件),Python 就可以了。这是因为文件中文本的顺序(输入和输出)将反映语义顺序,而不是文本应该出现在最终用户屏幕上的方向。如果您生成一个 XML 文件并使用支持 BIDI 的阅读器(如大多数 Web 浏览器)打开它,您应该会看到以正确顺序显示的文本。

供您参考,还有一些模块可以更好地支持 Python 的双向文本渲染。一个是python-bidi,它显然适用于大多数从右到左文本的语言,但还不能正确处理阿拉伯字母的形状。另一个是pyfribidi是GNU fribidi库的绑定,它显然只能在 Linux(可能还有其他类 Unix 操作系统)上轻松编译。我没有使用过这两个,所以我不能提供个人推荐。

于 2012-12-14T06:57:51.323 回答