2

我有一个字符串。

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)

4

5 回答 5

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>"
于 2014-04-16T08:53:27.797 回答
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请注意,传递给它的初始化程序如何.decode('gbk')不表示为 Unicode 字符串,而是表示为纯字节字符串。

另见http://nedbatchelder.com/text/unipain.html

于 2014-08-22T09:32:06.217 回答
0

如果您可以将警报保存在单独的字符串“a”中:

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>
于 2014-04-16T08:50:06.487 回答
-1

我有同样的问题

像这样:

名称 = u'\xb9\xc5\xbd\xa3\xc6\xe6\xcc\xb7'

我想转换为

你'\u53e4\u5251\u5947\u8c2d'

这是我的解决方案:

new_name = name.encode('iso-8859-1').decode('gbk')

我试过你的

s = u"警报('\xc7\xeb\xca\xe4\xc8\xeb\xd5\xfd\xc8\xb7\xd1\xe9\xd6\xa4\xc2\xeb,\xd0\xbb\xd0\xbb!' );位置='index.asp';"

印刷

alert('ÇëÊäÈëÕýÈ·ÑéÖ¤Âë,лл!');location='index.asp';

然后:

_s = s.encode('iso-8859-1').decode('gbk')

印刷

alert('请输入正确的验证码,谢谢!');location='index.asp';

希望能帮到你..

于 2014-08-22T09:20:07.100 回答
-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')
于 2014-04-16T08:38:02.883 回答