当使用CLoader作为yaml.load的加载器时,它不会在我的json中处理Unicode。但是,当我使用默认加载器时,json 加载正常。
我可以通过捕获异常并在没有 CLoader 的情况下加载它来解决此问题。
有没有人知道解决方案的经验?
#!/usr/bin/python
import yaml
from yaml import CLoader as Loader1
from yaml import Loader
data_string = ""nickname": "Stringhere ud83dudcaf""
print "Loading with default loader"
json_data = yaml.load(data_string, Loader=Loader)
print "Loading with CLoader"
json_data = yaml.load(data_string, Loader=Loader1)
yaml.scanner.ScannerError: while parsing a quoted scalar
in "<byte string>", line 1, column 13
found invalid Unicode character escape code
in "<byte string>", line 1, column 27
请参阅 http://pyyaml.org/wiki/PyYAMLDocumentation
PyYAML CLoader 在引擎盖下使用 libyaml。利比亚将拒绝这种逃跑。仅支持某些u
转义,但不支持构建代理项对的转义。
但是,PyYAML python解析器(由使用Loader
导入的加载器使用(解析此解析,但仍然不会将其转换为Unicode字符。
/1.2 规范未明确提及代理项对。但是,由于 YAML 1.2 是 JSON 的超集,并且 JSON 支持这一点,我认为 libyaml 也应该支持这一点。(它面向 YAML 1.1,但由于它目前只会返回错误,因此添加对此的支持并没有什么坏处。
我为 libyaml 创建了一个问题:https://github.com/yaml/libyaml/issues/110
https://en.wikipedia.org/wiki/UTF-16
JSON RFC 在第 7 章中提到了代理项对:https://www.rfc-editor.org/rfc/rfc7159#section-7