ホームページ  >  記事  >  バックエンド開発  >  JavaScriptのエスケープ関数でエンコードされた文字列をPythonで復元する方法

JavaScriptのエスケープ関数でエンコードされた文字列をPythonで復元する方法

WBOY
WBOYオリジナル
2016-06-16 08:42:361549ブラウズ

問題が発生し、Python を使用して JavaScript のエスケープの漢字を復元する必要がありましたが、長時間検索しても答えが見つからなかったので、自分で解決策を詳しく調べる必要がありました。
まず、js
でテキストをエスケープするエンコーディングを見てみましょう。

コードをコピー コードは次のとおりです:

a =エスケープ('これはテキストの文字列です');
アラート(a);

出力:
コードをコピー コードは次のとおりです:

%u8FD9%u662F%u4E00%u4E32%u6587%u5B57

一見すると、json 形式に少し似ているように感じますが、同じ漢字「これはテキストの文字列です」をエンコードした標準的な json 形式を見てみましょう。
コードをコピー コードは次のとおりです:
# エンコーディング=utf-8
json をインポート
a = 'これはテキスト文字列です'
print json.dumps(a)

出力:

コードをコピーします コードは次のとおりです:"u8fd9u662fu4e00u4e32u6587u5b57"
実際、比較すると、js エスケープ エンコーディングの各文字は「%u」記号に 4 桁の文字エンコーディングを加えたものですが、json エンコーディングの各文字は「u」記号に 4 桁の文字エンコーディングを加えたものになります。文字列置換操作を使用して json 形式を復元し、json モジュールのロード
を使用できます。
コードをコピー コードは次のとおりです:
# エンコーディング=utf-8
json をインポート

# js エスケープ文字列エンコーディング
c = '%u8FD9%u662F%u4E00%u4E32%u6587%u5B57'

#Json オブジェクトを復元
jsonObj = '"'+"".join([(i and "\"+i) for i in c.split('%')])+'"'

print json.loads(jsonObj)

特に、「%」を「」記号に置き換えた後、二重引用符を使用して文字列を囲むことを忘れないでください。こうすることで、文字列が json オブジェクトと見なされ、json.loads が出力されるようになります
その後、ついにウェブサイトでもっと簡単な方法を見つけました。コードは次のとおりです:

コードをコピー コードは次のとおりです:
# エンコーディング=utf-8
c = '%u8FD9%u662F%u4E00%u4E32%u6587%u5B57'
print "".join([(len(i)>0 and unichr(int(i,16)) or "") for i in c.split('%u')])

実際、考え方は似ています。「%u」記号が置き換えられ、残りの各文字は 4 ビットの固定長文字エンコーディングになります。最後に、unichr は中国語の文字にデコードされます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。