我有一个带有文件字段的模型表单。我有一个post_save信号附加到模型上,这样我就可以通过网络服务将上传的文件传递给第三方(使用Suds)。当我尝试传递文件内容时,Web服务调用即将消失:它会抛出“UnicodeDecodeError:'ascii'编解码器无法解码字节......”(很像在this SO question中)。Django:在保存后立即读取FileField内容
事情我不明白:当我转储文件内容我的信号在通话过程中屏幕上,它看起来像严重编码的垃圾乱:
åÉe Qçú>↑ Åû½ΣΘ⌐v^τ F,K╪Y<▲î°bαⁿ╡ê5 ╜ù sö╛Aî▲ƒF|04∙f╛@╙We⌡ ╤â╩_α↑└ƒ∙│ßï(è═|←⌂┌▒■µ'£─♂ ¢V↓ⁿq_;εδ▼εb<í╜ƒÅΩN00τó╛‼¥U╫Z─)?¬∞┐Γ╠C4ä▬Il☼Jº╚J╥Ñ├¿öÆi2═♂ïσNù&▐╤╡╔ΩIêµ╬]└@Üα╒→║¶\⌐UÑ╬çµ∟h⌂¼┘ë¢←↕╚↔ùα▌.¢d╖Y¡,♫½qÆ~╞äLX┬ä[┬2≥¥í=<ß▼]Hⁿ↕!b÷ ñÑU┌M╥╦m¼'½ù'∞"'£└►oêu↓q┘ôÉ>i_÷αµ0♥k§w▒c╠═╬6╙N2▀!)`►
当我抢同一个对象通过命令行,并呼吁它完全一样的方法,这一切看起来很好编码:
\x00F,K\xd8Y<\x1e\x8c\xf8b\xe0\xfc\xb5\x885\xff\x00\xbd\x97\xff\x00s\x07\x94\xbeA\x8c\x1e\x9fF|04\xf9f\[email protected]\xd3We\xf5\xff\x00\xd1\x83\xca_\xe0\x18\xc0\x9f\xf9\xb3\xe1\x8b(\x8a\xcd|\x1b\x7f\xda\xb1\xfe\xe6\'\x9c\xc4\x0b\xff\x00\x9bV\x19\x07\xfcq_;\xee\xeb\x1f\xeeb<\xa1\xbd\x9f\x8f\xeaN00\xe7\xa2\xbe\x13\x9dU\xd7Z\xc4)?\xaa\xec\xbf\xe2\xccC4\x84\x16Il\x0fJ\xa7\xc8J\xd2\xa5\xc3\xa8\x94\x92i2\xcd\x0b\x8b\xe5N\x97&\xde\xd1\xb5\xc9\xeaI\x88\xe6\xce]\[email protected]\x9a\xe0\xd5\x1a\xba\x14\\\xa9U\xa5\xce\x87\xe6\x1ch\x7f\xac\xd9\x89\x9b\x1b\x12\xc8\x1d\x97\xe0\xdd.\x9bd\xb7Y\xad,\x0e\xabq\x92~\xc6\x84LX\xc2\x84[\xc22\xf2\x9d\xa1=<\xe1\x1f]H\xfc\x12!b\xf6\x00\xa4\xa5U\xdaM\xd2\xcbm\xac\'\xab\x97\'\xec"\'\x9c\xc0\x10o\x88u\x19q\xd9\x93\x90>i_\xf6\xe0\xe60\x03k\x15w\xb1c\xcc\xcd\xce6\xd3N2\xdf!)`\x10\nB\x8a\xaes\x13\xad\xd4a\x19\xa7p?\xff\xd9'
什么了两步,我怎样才能得到正确的回复内容之间发生了什么?在我的信号中攫取第二个版本的对象,让我再次看到糟糕的编码混乱。 N.B.,这发生在Windows上。
我知道,第一是文件的二进制编码版本。我不明白的是为什么当我在保存时访问文件时得到它,但是当我在命令行打开它时获取Unicode表示。我猜测它与在Windows上和我的代码文件上设置的编码有关。 – Tom 2010-10-23 14:22:18
@Tom:我假设在第一个版本中,您直接将文件的二进制内容打印到屏幕上,而在第二个版本中,您让Python打印出数据的字符串表示形式(可能在交互式Python shell中?)。第二个版本仍然不是unicode - 字符串表示只显示字节。 Python对unicode字符串的表示看起来像'u'\ u4600 \ u4b2c \ u59d8''(这是上面的三个中文字符)。 – 2010-10-23 22:49:15