Python-yaml: yaml.reader.ReaderError: недопустимый символ - PullRequest
0 голосов
/ 29 апреля 2019

Я работаю над анализом счетов с использованием библиотеки invoice2data. Эта библиотека имеет предопределенные шаблоны в YAML для анализа счетов. Но когда я запускаю примеры, это дает мне ошибку синтаксического анализа YAML для всех шаблонов

Runnung это как:

invoice2data --input-reader tesseract FlipkartInvoice.pdf

Исключение:

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

В последней строке написано:

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-yaml . Кто-нибудь сталкивался с этой проблемой?

1 Ответ

3 голосов
/ 29 апреля 2019

То, что ваш ввод действителен, UTF-8 не имеет значения, поскольку источник YAML должен принимать только подмножество кодовых точек Unicode (независимо от UTF-8 или какой-либо другой кодировки).

В частности, он поддерживает только печатаемое подмножество Unicode и старая YAML 1.1 спецификация , поддерживаемая PyYAML, уточняет, что с:

Допустимый диапазон символов явно исключаетсуррогатный блок # xD800- # xDFFF, DEL # x7F, блок управления C0 # x0- # x1F (за исключением # x9, #xA и #xD), блок управления C1 # x80- # x9F, #xFFFE и #xFFFF.Любые такие символы должны быть представлены с помощью escape-последовательностей.

Таким образом, непечатная кодовая точка «BREAK PERMITTED HERE», 0x0082 явно запрещена (и это не одна из тех вещей, которые PyYAML должен разрешать, ноне делает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...