[CPyUG] 怎么替换字符串中的二进制乱码

0 views
Skip to first unread message

viders

unread,
Jul 7, 2011, 12:43:35 AM7/7/11
to pyth...@googlegroups.com
需要从数据中读取一下http请求,并把这些请求通过suds库组装成一个SOAP请求发送到远端的服务器。
但是数据库中一下http请求是multipart的上传类请求,于是就有一些二进制乱码:
比如:
...
Content-Disposition: form-data; name="_pic1"; filename="C:\Documents and Settings\viders\My Documents\My Pictures\Pic\222A8888.jpg"
Content-Type: image/pjpeg

�? JFIF H H  � C
� C
� P P �             � E     !1 AQa "q?#2脑 $4BCR倯ご?3TVfrs枴贬�           � -       !1 A "2QR亼 Ba毖q? ? 鮊€
 ( ?€
 ( ?€
 釱Whf颲[e?喸媼q屧ㄠ蚀厲蹳ZIO痙 (r5?-i擯栧剗矹?尴?蝓玁 帰XZ鞭#崛攳┸蹵X僦? 攅Z@?らM;X藙?N蹮垀s@jQ?Z徸林炑 M ~?麒]H=颦C胝_р}"?Gixq z坽徸玨?O?Q+谍?w鬪??-囯礥?а|乛聚Zy t>?`[~跲桫?騽D曐縅CmN=?shOU+湫 锏竩&6げ? 铚扺d)m n?c?X?6R mQ JJ?7繴*v>.捈鉵基 d?堌疻 熼G肗 裪囅w騲 癔R ?qW鑪陭瞘.C窄贇Cky V瀷1? 柚% W}}?Y z僫芐D 嫆1鬊懜 赈篽效 lq蒟H棯]y|G.;硅憖Ew??栧$?=e菚鏪Rbj?枝 }爲釼 Z3FE<尒n%C蓎??樋>`I 顝y∥+pP敐慗岻 ゛\ 硳诮湣]~? ?xΔ诩[_?叴b嫜?yz*?=ψk?猝"%Ak?撍滷秠BR?- 铈 b礖?蟷y[)厌麓4,怈
-----------------------------7db27132d0198
Content-Disposition: form-data; name="pic2"; filename=""
Content-Type: application/octet-stream
...
google了很久,找不到非常合用的替换函数,只找到替换汉字的:
        req = req.decode('latin-1').encode('utf-8')
        if re.findall('[\x80-\xff].', req):
            req = re.sub('[\x80-\xff].', 'E', req)
发现只能把其中的汉字替换成字母E,但是还有其他特殊字符替换不了,不知道各位遇到过这种情况没有?
谢谢

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
发言: pyth...@googlegroups.com
退订: python-cn+...@googlegroups.com (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug
http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

limodou

unread,
Jul 7, 2011, 12:47:32 AM7/7/11
to pyth...@googlegroups.com
2011/7/7 viders <piv...@gmail.com>:

你保存的时候感觉已经乱了.有没有使用BLOB字段?另外可以考虑在保存数据库前先进行base64编码,取出来时再进行base64解码这样应该会好一些.

--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: http://code.google.com/p/uliweb/
My Blog: http://hi.baidu.com/limodou

viders

unread,
Jul 7, 2011, 1:13:24 AM7/7/11
to pyth...@googlegroups.com
保存的时候是BLOB的,只是我现在需要从数据里面把这些数据取出来,然后用suds组装成SOAP请求发送,但是suds不认这些乱码的,所以想找个正则之类看看能不能把乱码替换掉

zn i

unread,
Jul 7, 2011, 5:01:00 AM7/7/11
to pyth...@googlegroups.com
额。。你这样替换了以后能还原么
感觉还是用 base64 编码比较好, 或者 binascii.b2a_hex

viders

unread,
Jul 7, 2011, 5:05:44 AM7/7/11
to pyth...@googlegroups.com
不需要还原的,只是提供样本而已,中文、英文还是二进制乱码都不重要的

zn i

unread,
Jul 7, 2011, 5:27:13 AM7/7/11
to pyth...@googlegroups.com
req = re.sub('[\x80-\xff].', 'E', req) 替换的是 128 ~ 255 范围的字符
剩下的特殊字符应该是 0 ~ 31那些控制字符,
0 到 16进制的20,这样应该可以吧:
req = re.sub('[\x00-\x20].', 'E', req)
Reply all
Reply to author
Forward
0 new messages