我有一个字符串。
s = u"<script language=javascript>alert('\xc7\xeb\xca\xe4\xc8\xeb\xd5\xfd\xc8\xb7\xd1\xe9\xd6\xa4\xc2\xeb,\xd0\xbb\xd0\xbb!');location='index.asp';</script></script>"
如何将s
翻译成utf-8字符串?我尝试了s.decode('gbk').encode('utf-8')
但是python报告错误:UnicodeEncodeError: 'ascii' codec can't encode characters in position 35-50: ordinal not in range(128)
答案 0 :(得分:6)
在python2中,试试这个转换你的unicode字符串:
>>> s.encode('latin-1').decode('gbk')
u"<script language=javascript>alert('\u8bf7\u8f93\u5165\u6b63\u786e\u9a8c\u8bc1\u7801,\u8c22\u8c22!');location='index.asp';</script></script>"
然后你可以根据需要编码为utf-8。
>>> s.encode('latin-1').decode('gbk').encode('utf-8')
"<script language=javascript>alert('\xe8\xaf\xb7\xe8\xbe\x93\xe5\x85\xa5\xe6\xad\xa3\xe7\xa1\xae\xe9\xaa\x8c\xe8\xaf\x81\xe7\xa0\x81,\xe8\xb0\xa2\xe8\xb0\xa2!');location='index.asp';</script></script>"
答案 1 :(得分:3)
你正在搅拌苹果和橘子。 GBK编码的字符串不是Unicode字符串,因此不应以u'...'
字符串结尾。
这是在Python 2中执行此操作的正确方法。
g = '\xc7\xeb\xca\xe4\xc8\xeb\xd5\xfd\xc8\xb7\xd1\xe9\xd6\xa4\xc2\xeb,' \
'\xd0\xbb\xd0\xbb!'.decode('gbk')
s = u"<script language=javascript>alert(" + g +
u");location='index.asp';</script></script>"
注意传递给g
的{{1}}初始值设定项不是表示为Unicode字符串,而是表示为普通字节字符串。
答案 2 :(得分:0)
如果您可以将警报保存在单独的字符串中,请#34; a&#34;:
a = '\xc7\xeb\xca\xe4\xc8\xeb\xd5\xfd\xc8\xb7\xd1\xe9\xd6\xa4\xc2\xeb,\xd0\xbb\xd0\xbb!'.decode("gbk")
s = u"<script language=javascript>alert('"+a+"');location='index.asp';</script></script>"
print s
然后会打印出来:
<script language=javascript>alert('请输入正确验证码,谢谢!');location='index.asp';</script></script>
如果你想一次性自动提取子字符串:
s = "<script language=javascript>alert('\xc7\xeb\xca\xe4\xc8\xeb\xd5\xfd\xc8\xb7\xd1\xe9\xd6\xa4\xc2\xeb,\xd0\xbb\xd0\xbb!');location='index.asp';</script></script>"
s = unicode("'".join((s.decode("gbk").split("'",2))))
print s
将打印:
<script language=javascript>alert('请输入正确验证码,谢谢!');location='index.asp';</script></script>
答案 3 :(得分:-1)
看看unicodedata
,但我认为一种方法是:
import unicodedata
s = u"<script language=javascript>alert('\xc7\xeb\xca\xe4\xc8\xeb\xd5\xfd\xc8\xb7\xd1\xe9\xd6\xa4\xc2\xeb,\xd0\xbb\xd0\xbb!');location='index.asp';</script></script>"
unicodedata.normalize('NFKD', s).encode('utf-8','ignore')
答案 4 :(得分:-1)
我有同样的问题
像这样:
name = u'\ xb9 \ xc5 \ xbd \ xa3 \ xc6 \ xe6 \ xcc \ xb7'
我想转换为
U '\ u53e4 \ u5251 \ u5947 \ u8c2d'
这是我的解决方案:
new_name = name.encode('iso-8859-1')。decode('gbk')
我试过你的
s = u“alert('\ xc7 \ xeb \ xca \ xe4 \ xc8 \ xeb \ xd5 \ xfd \ xc8 \ xb7 \ xd1 \ xe9 \ xd6 \ xa4 \ xc2 \ xeb,\ xd0 \ xbb \ xd0 \ XBB! ');位置=' 的index.asp';“
print s
警报('ÇëÊäÈëÕýÈ·ÑéÖ¤Âë,d»d»! ');位置=' 的index.asp';
然后:
希望可以帮到你.._s = s.encode('iso-8859-1')。decode('gbk')
打印_s
警报( '请输入正确验证码,谢谢!');位置= '的index.asp';