Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UnicodeEncodeError:&x27;utf-8';编解码器可以';在位置0-15处对字符进行t编码:不允许使用代理_Python_Python 3.x_Unicode_Encoding_Utf 8 - Fatal编程技术网

Python UnicodeEncodeError:&x27;utf-8';编解码器可以';在位置0-15处对字符进行t编码:不允许使用代理

Python UnicodeEncodeError:&x27;utf-8';编解码器可以';在位置0-15处对字符进行t编码:不允许使用代理,python,python-3.x,unicode,encoding,utf-8,Python,Python 3.x,Unicode,Encoding,Utf 8,我在打印unicode的结果时遇到了问题,以下是我尝试过的 data = u"\ud835\udc6a\ud835\udc89\ud835\udc90\ud835\udc84\ud835\udc8c" result = data.encode('utf-8', 'surrogatepass') #b'\xed\xa0\xb5\xed\xb1\xaa\xed\xa0\xb5\xed\xb2\x89\xed\xa0\xb5\xed\xb2\x90\xed\xa0\xb5\xed

我在打印unicode的结果时遇到了问题,以下是我尝试过的

data = u"\ud835\udc6a\ud835\udc89\ud835\udc90\ud835\udc84\ud835\udc8c"
result = data.encode('utf-8', 'surrogatepass') 
#b'\xed\xa0\xb5\xed\xb1\xaa\xed\xa0\xb5\xed\xb2\x89\xed\xa0\xb5\xed\xb2\x90\xed\xa0\xb5\xed\xb2\x84\xed\xa0\xb5\xed\xb2\x8c'
result.decode('utf-8')
#UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 0: invalid continuation byte

根据Charbase,
\udc90
是无效字符

我可以通过这个网站转换unicode:在“解码/Unescape unicode实体”部分下

下面是结果的屏幕截图


我怎样才能把这个unicode打印出来?我从API接收数据,并希望将其存储在MySQL数据库中。目前,MySQL数据库中的结果是????

该网站提供的可能是包含代理项对的JSON格式转义序列,这实际上是一种UTF-16,Javascript将字符串视为隐藏。相同的原始字符串文本在Python中无效。您想要的不是让Python解释转义序列,而是创建一个包含转义序列的字符串:

>>> r'\ud835\udc6a\ud835\udc89\ud835\udc90\ud835\udc84\ud835\udc8c'
'\\ud835\\udc6a\\ud835\\udc89\\ud835\\udc90\\ud835\\udc84\\ud835\\udc8c'
由于这是Javascript/JSON格式,请使用
JSON
模块对其进行解码:

导入json >>>加载(r''\ud835\udc6a\ud835\udc89\ud835\udc90\ud835\udc84\ud835\udc8c')
'迂腐模式:Python字符串允许代理(当与适当的解码器一起使用时,但此解码器在这里没有帮助)。它们很少被使用,例如,当把
sys.argv
读作“escape”(参见PEP383)时。是的,我确信Python也可以直接处理这些问题,我只是到目前为止还不需要它,也不想在这里深入挖掘以找到合适的编解码器,因为我认为这主要是因为误解了Javascript文本和Python之间的区别。如果您可以添加这些详细信息,请务必添加。正如您在首字母中看到的一样:代理项已放入字符串中。您将字符串前缀
u
改为
r
。IMHO应该更早地处理这个问题(不在Python代码中放置代理,这似乎是一种“手动”解码)。我问了一些细节。我猜他们正在试验JSON,并将字符串随意复制粘贴到Python中,但是的,这只是一种预感……第一行的起源是什么?我认为应该在这里解决这个问题:不在python字符串中放置代理。如果它是自动生成的,只需将其作为二进制转义(并让“解码”来解释代码)。第二个注意事项:您确定要使用Python3吗?在Python3上,不要添加字符串后缀
u
“\ud835\udc6a\ud835\udc89\ud835\udc90\ud835\udc84\ud835\udc8c”
这是我从API检索数据时得到的确切字符串。我正在使用Python3。当我试图将该字符串存储到MySQL数据库中时出现问题,在数据库中它显示为
??????
,因此我在保存到数据库之前使用了
json.dumps(data)
,在从数据库检索它时使用
json.loads(data)