我是一个 Python 新手,我正在尝试编写一个 Python 脚本,将文本文件(以特定格式编写)解析为 XML 文件。该文本文件是用非欧洲语言编写的,以 UTF-8 编码(从右到左编写),仅此一点就给我带来了一些麻烦。
文本文件格式:
{number}"|"{number}"|" {text in UTF-8}
其中一个例子是:
1|2|حمد ހުރީ، عالم ތަކުގެ ވެރި اللَّه އަށެވެ
最初的问题是,当读取文本时,Python 中的单词顺序会发生变化。 如果文本读作: 1|2| ABC DEF,Python 将其显示为 1|2|防御ABC 这显然是不正确的。
我正在使用 file = open("text.txt")
并在其上运行 readlines()
来获取文本。
为了修复这个错误,我尝试使用 split()
来分隔单词并将它们放入列表中,然后根据需要重新排序,但是在 this 情况下,可能存在转换错误,并且我收到垃圾字符。将此类 UTF-8 字符存储到 Python 列表中并检索它们存在问题;字符不会被保留。
如果这个列表处理错误得到修复,那么编写 XML 文件应该是小菜一碟。
编辑:如果有帮助的话,语言是迪维希语,字母表是塔纳语。
最佳答案
Python 内部对 BIDI 渲染的支持很差。也就是说,它没有完全实现 Unicode Bidirectional Algorithm .
但是,除非您直接在 Python 中进行文本布局,否则这并不重要。对于您所描述的项目(读取带有一些 BIDI 文本的文件并输出带有相同文本的另一个文件),Python 就可以了。这是因为文件中文本的顺序(输入和输出)将反射(reflect)语义顺序,而不是文本应在最终用户屏幕上显示的方向。如果您生成一个 XML 文件并使用支持 BIDI 的阅读器(如大多数 Web 浏览器)打开它,您应该会看到文本以正确的顺序显示。
供您引用,还有一些模块为 Python 的双向文本渲染添加了更好的支持。一是python-bidi ,这显然对于大多数从右到左文本的语言来说效果很好,但还不能正确处理阿拉伯字母的形状。另一个是pyfribidi GNU fribidi 的绑定(bind)库,显然只能在 Linux(或许还有其他类 Unix 操作系统)上轻松编译。我没有使用过其中任何一个,因此无法提供个人推荐。
关于python - 在 Python 中从 UTF-8 解析为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870744/