- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在用 python 编写一组工具,以从交通模拟软件生成的一些 xml 文件中提取数据。由于生成的文件可能非常大,我使用 xml.parsers.expat 来解析它们。
问题是,当我在工作时在 Windows XP 机器上运行我的脚本时,它运行良好,但在家里,在 Ubuntu 10.10 上,在同一个文件上,我收到以下错误:ExpatError:格式不正确(无效标记):第 1 行,第 0 列
该文件最初是用 utf-8 编码的,标签中声明的编码是 ascii,因此尝试将其更改为 utf-8(或 UTF8 或 utf8)但没有成功。由于没有 BOM,我尝试编写它,但仍然没有成功。我还尝试用 Unix 换行符 (CR) 替换 Windows 换行符 (CR/LF)。也没有任何成功。
此外,python 的工作版本是 2.7.1,在我的 Ubuntu 机器上是 2.6.6,但我认为我的问题与以下内容无关:几周前我将工作计算机的 Python 从 2.6 升级到 2.7,没有遇到任何问题.
因为我不是这方面的专家,所以我的想法已经用完了,有什么提示吗?
编辑:经过进一步调查(我现在很头疼,我讨厌与 Unicode 相关的麻烦),看起来问题已通过将系统环境变量 LANG、LC_ALL 和 LANGUAGE 正确设置为(在我的例子中)“fr_FR.utf-8”来解决。我不明白为什么他们一开始不这样做,也不明白为什么现在它起作用了...
谢谢你们的帮助!
最佳答案
文档摘录:
xml.parsers.expat.XML_ERROR_INVALID_TOKEN
当无法将输入字节正确分配给字符时引发;例如,UTF-8 输入流中的 NUL 字节(值 0)。
ExpatError.lineno
检测到错误的行号。第一行编号为1。
ExpatError.offset
发生错误的行中的字符偏移量。第一列编号为 0。
以上内容表明您的文件中的第一个字节有问题。
从原始文件开始,即适用于 Windows 的文件。编辑您的问题以显示这样做的结果:
python -c "print repr(open('win_ok_file.xml', 'rb').read(200))"
这将明确显示文件前 200 个字节的内容。
同时向我们展示您的代码的精简版本,您已经检查过它可以在 Windows 上运行以克服最初的错误,但在 Linux 上会重现该问题。
一些断言,关于它们的值(value):
“文件最初编码为utf-8 和声明的编码标签是 ascii"... 如果XML 声明中的编码是"ascii"但有非 ASCII文件中的字符,符合解析器应该引发异常。你确定你报告的是什么吗?
XML 的默认编码文件是UTF-8。换一种说法,如果编码中没有提到XML 声明,或者没有根本没有 XML 声明,解析器是需要使用 UTF-8 解码。
将 UTF-8 BOM 放在开头是阻碍多于帮助。
XML 标准要求解析器接受 CR
作为 XML 中的有效字节文件,然后立即假装它不存在(除了可能在元素与xmlns:space="保留"
)。改变CR LF
到 LF
不是一个好主意。
还有一些问题:一个“相当大”的文件有多少字节?您是否考虑过使用 xml.etree.cElementTree
或 lxml
中的 iterparse()
?
关于python - 基于 expat 的 xml 解析脚本在 Linux 上不工作,在 Windows 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071420/
我有 powershell 脚本。通过调度程序,我运行 bat 文件,该文件运行 PS1 文件。 BAT文件 Powershell.exe -executionpolicy remotesigned
什么更快? 或者 $.getScript('../js/SOME.js', function (){ ... // with $.ajaxSetup({ cache: true });
需要bash脚本来显示文件 #!/bin/bash my_ls() { # save current directory then cd to "$1" pushd "$1" >/dev/nu
我有一个输入 csv 文件,实际上我需要在输入文件中选择第 2 列和第 3 列值,并且需要转换两个值的时区(从 PT 到 CT),转换后我需要替换转换后的时区值到文件。 注意: 所有输入日期值都在太平
我正在使用/etc/init.d/httpd 作为 init.d 脚本的模板。我了解文件中发生的所有内容,但以下行除外: LANG=$HTTPD_LANG daemon --pidfile=${pid
我有以下选择: python runscript.py -O start -a "-a "\"-o \\\"-f/dev/sda1 -b256k -Q8\\\" -l test -p maim\""
我对 shell 脚本完全陌生,但我需要编写一个 shell 脚本来检查文件是否存在,然后移动到另一个位置 这是我写的: 一旦设备崩溃,我就会在/storage/sdcard1/1 中收集日志 #!/
我正在使用 bash 脚本从文本文件中读取数据。 数据: 04:31 Alex M.O.R.P.H. & Natalie Gioia - My Heaven http://goo.gl/rMOa2q
这是单击按钮时运行的 javascript 的结尾 xmlObj.open ('GET', /ajax.php, true); xmlObj.send (''); } 所以这会执行根目录中的php脚本
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我需要将文件转换为可读流以通过 api 上传,有一个使用 fs.createReadStream 的 Node js 示例。任何人都可以告诉我上述声明的 python 等价物是什么? 例子 const
我有一个 shell 脚本 cron,它从同一目录调用 python 脚本,但是当这个 cron 执行时,我没有从我的 python 脚本中获得预期的输出,当我手动执行它时,我的 python 脚本的
如何使 XMLHttpRequest (ajax) 调用的 php 脚本安全。 我的意思是,不让 PHP 文件通过直接 url 运行,只能通过脚本从我的页面调用(我不想向未登录的用户显示数据库结果,并
我正在尝试添加以下内容 我正在使用经典的 asp。但我不断收到的错误是“一个脚本 block 不能放在另一个脚本 block 内。”我尝试了此处的 document.write 技术:Javasc
如何从另一个 PHP 脚本(如批处理文件)中运行多个 PHP 脚本?如果我了解 include 在做什么,我认为 include 不会起作用;因为我正在运行的每个文件都会重新声明一些相同的函数等。我想
我想创建具有动态内容的网页。我有一个 HTML 页面,我想从中调用一个 lua 脚本 如何调用 lua 脚本? ? ? 从中检索数据?我可以做类似的事情吗: int xx = 0; xx
我删除了我的第一个问题,并重新编写了更多细节和附加 jSfiddle domos。 我有一个脚本,它运行查询并返回数据,然后填充表。表中的行自动循环滚动。所有这些工作正常,并通过使用以下代码完成。然而
我尝试使用 amp 脚本,但收到此错误: “[amp-script] 脚本哈希未找到。amp-script[script="hello-world"].js 必须在元[name="amp-script
我有一个读取输入的 Shell 脚本 #!/bin/bash echo "Type the year that you want to check (4 digits), followed by [E
我正在从 nodejs 调用 Lua 脚本。我想传递一个数组作为参数。我在 Lua 中解析该数组时遇到问题。 下面是一个例子: var script = 'local actorlist = ARGV
我是一名优秀的程序员,十分优秀!