首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python: yaml.reader.ReaderError:不可接受的字符

Python: yaml.reader.ReaderError:不可接受的字符
EN

Stack Overflow用户
提问于 2019-04-29 11:15:14
回答 1查看 6.6K关注 0票数 2

我正在使用invoice2data库进行发票解析。此库在YAML中有用于解析发票的预定义模板。但是,当我运行示例时,它给出了所有模板的YAML解析错误。

将其运行为:

代码语言:javascript
运行
复制
invoice2data --input-reader tesseract FlipkartInvoice.pdf

例外:

代码语言:javascript
运行
复制
Traceback (most recent call last):
File "/home/webwerks/.local/bin/invoice2data", line 10, in <module>
sys.exit(main())
File "/home/webwerks/.local/lib/python3.5/site-packages/invoice2data/main.py", line 191, in main
templates += read_templates()
File "/home/webwerks/.local/lib/python3.5/site-packages/invoice2data/extract/loader.py", line 88, in read_templates
tpl = ordered_load(template_file.read())
File "/home/webwerks/.local/lib/python3.5/site-packages/invoice2data/extract/loader.py", line 36, in ordered_load
return yaml.load(stream, OrderedLoader)
File "/usr/local/lib/python3.5/dist-packages/yaml/__init__.py", line 112, in load
loader = Loader(stream)
File "/usr/local/lib/python3.5/dist-packages/yaml/loader.py", line 44, in __init__
Reader.__init__(self, stream)
File "/usr/local/lib/python3.5/dist-packages/yaml/reader.py", line 74, in __init__
self.check_printable(stream)
File "/usr/local/lib/python3.5/dist-packages/yaml/reader.py", line 144, in check_printable
'unicode', "special characters are not allowed")
yaml.reader.ReaderError: unacceptable character #x0082: special characters are not allowed
in "<unicode string>", position 312

最后一行说:

代码语言:javascript
运行
复制
File "/usr/local/lib/python3.5/dist-packages/yaml/reader.py", line 144, in check_printable
'unicode', "special characters are not allowed")
yaml.reader.ReaderError: unacceptable character #x0082: special characters are not allowed
in "<unicode string>", position 312

我检查了模板。所有的都是有效的UTF-8格式.

问题似乎是python package.Anyone遇到了这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2019-04-29 11:45:44

您的输入是否有效,UTF-8与此无关,因为YAML源应该只接受Unicode代码点的子集(独立于UTF-8或其他编码)。

特别是,它只支持Unicode的可打印子集和PyYAML支持的旧YAML 1.1规范,并阐述了这一点:

允许的字符范围显式地排除代理项块#xD 800-#xDFFF、DEL #x7F、C0控制块#x0-#x1F (除#x9、#xA和#xD外)、C1控制块#x80-#x9F、#xFFFE和#xFFFF。任何这样的字符都必须使用转义序列来表示。

因此,不可打印的“允许在这里中断”代码点,0x0082显然是不允许的(并且不是PyYAML应该允许的事情之一,但不允许)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55902201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档