pythoncloader和Unicode

pythoncloader和Unicode,python,json,unicode,yaml,Python,Json,Unicode,Yaml,当使用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\": \

当使用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 \ud83d\udcaf\""
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
#/usr/bin/python
进口yaml
从yaml导入装载机作为装载机1
从yaml导入加载器
数据\u string=“\”昵称\:\“Stringhere\ud83d\udcaf\”
打印“使用默认加载程序加载”
json_data=yaml.load(数据_字符串,Loader=Loader)
打印“使用CLoader加载”
json_data=yaml.load(数据_字符串,Loader=Loader1)
yaml.scanner.ScannerError:分析带引号的标量时出错
在“”中,第1行第13列
找到无效的Unicode字符转义码
在“”中,第1行第27列
请参见

Pyaml CLoader在引擎盖下使用Libyml。利比亚姆将拒绝这种逃避。只支持一些
\u
转义,但不支持构建代理项对的转义

PyYAML python解析器(由随
loader
导入的加载程序使用)会对此进行解析,但仍然不会将其转换为unicode字符

YAML 1.1/1.2规范没有明确提到代理项对。 然而,由于YAML 1.2是JSON的超集,JSON支持这一点,因此我认为libyaml也应该支持这一点。(它的目标是YAML 1.1,但由于它目前只返回一个错误,因此添加对该错误的支持并没有坏处。)

我为Libyml创建了一个问题:

JSON RFC在第7章中提到了代理项对:

数据字符串的内容是什么?用硬编码字符串替换读取操作,以接近所需的MCVE。为什么不使用Python 3呢?此外,您是否尝试过加载该文件并使用正确的编码将其转换为Python
unicode
对象?当然,数据字符串的内容太大,无法粘贴,但出现问题的字符串是“昵称”:“Stringhere\ud83d\udcaf”。我不想使用Python 3。我没有尝试将其转换为Python unicode对象。data\u string=unicode(data\u string,“utf-8”)这会导致相同的异常。CLoader不想使用unicode。libyaml不支持代理项对,因此那些
\u
转义已被解析器拒绝。不过我认为这应该是固定的。另外,请不要在评论中发布有关代码/数据的信息。首先尝试创建一个简单的示例:您已经知道输入中有问题的部分,因此应该很容易创建一个测试用例,人们可以简单地复制并运行HMMM,虽然这解释了发生的事情,但我不完全同意这个解释:JSON允许使用四个十六进制数字表示Unicode代码点,但我没有发现任何关于代理对的明确提及。无论如何,JSON是UTF-8,因为YAML是它的超集,所以不必转义这些“特殊”字符,这应该提供一种解决方法。UTF-8表示法是
u“\ud83d\udcaf”。encode('UTF-8')
,如果您需要字节或@UlrichEckhardt,我添加了一个指向JSON RFC的链接,其中提到了这一点。