# -*- coding: utf8 -*-
#! python
print(repr("測試報警,xxxx是大豬頭".decode("UTF8").encode("GBK")).replace("http://x","%"))
注意第一個 decode("UTF8") 要與文件聲明的編碼一樣。
最開始對這個問題的接觸,來自于一個Javascript解謎闖關的小游戲,某一關的提示如下:
剛開始的幾關都是很簡單很簡單的哦~~這一關只是簡單的字符串變形而已…..
后面是一大長串開頭是%5Cu4e0b%5Cu4e00%5Cu5173%5Cu7684這樣的字符串。
這種東西以前經常在瀏覽器的地址欄見到,就是一直不知道怎么轉換成能看懂的東東,
網上google了一下,結合python的url解碼和unicode解碼,解決方式如下:
import urllib escaped_str="%5Cu4e0b%5Cu4e00%5Cu5173%5Cu7684%5Cu9875%5Cu9762%5Cu540d%5Cu5b57%5Cu662f%5Cx20%5Cx69%5Cx32%5Cx6a%5Cx62%5Cx6a%5Cx33%5Cx69%5Cx34%5Cx62%5Cx62%5Cx35%5Cx34%5Cx62%5Cx35%5Cx32%5Cx69%5Cx62%5Cx33%5Cx2e%5Cx68%5Cx74%5Cx6d"
print urllib.unquote(escaped_str).decode('unicode-escape')
最近,我對firefox的autoproxy插件中的gfwlist中的中文詞匯(用過代理的同學們,你們懂的)產生了興趣,然而這些網址都是用url編碼的,比如http://zh.wikipedia.org/wiki/%E9%97%A8,需要使用正則表達式將被url編碼的中文字符提取出來,寫了個小腳本如下:
import urllib
import re
with open("listfile","r") as f:
for url_str in f:
match=re.compile("((%/w{2}){3,})").findall(url_str)
#漢字url編碼的樣式是:百分號+2個十六進制數,重復3次
if match!=None:
#如果匹配成功,則將提取出的部分轉換為中文
for trans in match:
print urllib.unquote(trans[0]),
然而這個腳本仍有一些缺點,對于列表文件中的某些中文字符仍然不能正常解碼,比如下面這幾行測試代碼
import urllib
a="http://zh.wikipedia.org/wiki/%BD%F0%B6"
b="http://zh.wikipedia.org/wiki/%E9%97%A8"
de=urllib.unquote
print de(a),de(b)
輸出結果就是前者可以正確解碼,而后者不可以,個人覺得原因可能和big5編碼有關,如果誰知道什么解決辦法,還請告訴我一下~
以下是補充:
de(a).decode(“gbk”,”ignore”)
de(b).decode(“utf8″,”ignore”)
主站蜘蛛池模板:
西安市|
乌什县|
永安市|
凤城市|
西青区|
玉林市|
勃利县|
渝中区|
突泉县|
江西省|
唐海县|
望奎县|
平度市|
陈巴尔虎旗|
招远市|
遂昌县|
宜丰县|
顺义区|
交口县|
华容县|
奈曼旗|
福鼎市|
井研县|
佛学|
紫云|
手游|
石嘴山市|
汾阳市|
临猗县|
文化|
伊宁县|
元氏县|
原阳县|
磐安县|
临漳县|
土默特右旗|
会理县|
文昌市|
米易县|
南丹县|
邻水|