python - 在 Python 中从 UTF-8 解析为 XML

标签 python list utf-8 python-2.7 arabic

我是一个 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/

相关文章:

plsql - PL/SQL - 使用 utl_smtp 发送西里尔字符

php - 检测 PCRE 是否是在没​​有 --enable-unicode-properties 或 --enable-utf8 配置开关的情况下构建的

python - 使用 imshow 将连续图像/数组显示为 python 中的重复动画

python - 在python中以某些数字打印数字

python - 将两个列表组合成一个列表列表

c# - 在 C# List 中查找重复字符串的索引

java - 当我修改 BeanUtils.CopyProperties 的目标对象时,源代码被修改

python - 如何让 PyC​​harm 在其控制台中显示 unicode 数据?

python - 如何使用 pd.melt 转换数据框

python - urlopen windows ftp 错误