Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中UTF-8到XML的解析_Python_List_Utf 8_Python 2.7_Arabic - Fatal编程技术网

Python中UTF-8到XML的解析

Python中UTF-8到XML的解析,python,list,utf-8,python-2.7,arabic,Python,List,Utf 8,Python 2.7,Arabic,我是一名Python新手,我正在尝试编写一个Python脚本,将文本文件(以特定格式编写)解析为XML文件。文本文件是用非欧洲语言编写的,用UTF-8编码(从右到左编写),这本身就给我带来了一些麻烦 文本文件格式: {number}"|"{number}"|" {text in UTF-8} 例如: 1|2|حمد ހުރީ، عالم ތަކުގެ ވެރި اللَّه އަށެވެ 最初的问题是,在阅读文本时,单词的顺序在Python中切换。 如果案文改为: 1 | 2 | AB

我是一名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,字母表是Thana

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

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


为了便于参考,还有一些模块为Python添加了更好的双向文本呈现支持。一个是,这显然适用于大多数从右向左文本的语言,但还不能正确处理阿拉伯字母的形状。另一个是库的绑定,它显然只能在Linux(或者其他类似Unix的OSs)上轻松编译。这两个我都没用过,所以我不能提供个人推荐。

你看过吗?它使用给定的模式打开一个编码文件,并返回一个提供透明编码/解码的包装版本。我尝试使用编解码器,但没有帮助。句子中的单词仍然在翻来翻去。那么原来的问题是什么呢?拉丁字符的显示顺序不正确?还是阿拉伯语?如果只是试图破解,为什么需要修复列表处理?不,拉丁字符不是问题所在。句子中的阿拉伯语单词颠倒过来,意思是“我正在阅读”被Python写成“reading.am我”。我不知道怎么解决这个问题。我试图通过将所有单词放入一个列表来修复它,但一旦我从该列表中检索到字符,字符就会损坏——可能是Python列表不支持UTF-8。在进行一些检查后,Python似乎不会以本机方式执行BIDI文本呈现。我怀疑,对于写入XML文件,它可以正常工作,因为它在内部以正确的顺序保存字符串的代码点。这可能是调试的痛苦。如果您尝试将文本写入XML格式,并使用BIDI感知程序(像大多数web浏览器一样)打开它,您会得到什么?