2016-02-13 28 views
3

我有以下字符串"◣⛭◣◃✺▲♢"我想將該字符串轉換爲"\u25E3\u26ED\u25E3\u25C3\u273A\u25B2\u2662"。這個網站的確如此https://mothereff.in/js-escapes如何在python中轉義UNICODE字符串

我想知道如果這是可能的蟒蛇。我已經嘗試從Python的unicode文檔分配的東西,但失敗悲慘。什麼,我嘗試過

例子:

#!/usr/bin/env python 
# -*- coding: latin-1 -*- 

f = open('js.js', 'r').read() 

print(ord(f[:1])) 

幫助將不勝感激!

+2

嘗試'u「▲▲。」.encode('unicode-escape')' – georg

回答

0

如果您在Python 2的時候,那麼我會懷疑你得到的東西是這樣的:

>>> s = "◣⛭◣◃✺▲♢" 
>>> s[0] 
'\xe2' 

要到Unicode代碼點在UTF-8編碼的文件(或緩衝液),你需要decode它變成一個Python unicode對象第一(否則你會看到構成th的字節UTF-8編碼)。

>>> s_utf8 = s.decode('utf-8') 
>>> s_utf8[0] 
u'\u25e3' 
>>> ord(s_utf8[0]) 
9699 
>>> hex(ord(s_utf8[0])) 
'0x25e3' 

在你的情況,你可以從ORD()直接到文字的unicode逃生像這樣的東西:

>>> "\\u\x" % (ord(s_utf8[0])) 
'\\u25e3' 

或轉換整個字符串中的一個去同一個列表理解:

>>> ''.join(["\\u%04x" % (ord(c)) for c in s_utf8]) 
'\\u25e3\\u26ed\\u25e3\\u25c3\\u273a\\u25b2\\u2662' 

當然,當你在做的轉換這樣,你會在STR爲顯示代碼點的所有字符ING。你必須決定要顯示的代碼點,或者基本知識也將被轉義:

>>> ''.join(["\\u%04x" % (ord(c)) for c in u"ABCD"]) 
'\\u0041\\u0042\\u0043\\u0044' 

或者,只是使用喬格的建議,讓蟒蛇身影了這一切,你。

+0

失敗的基礎多語言平面以外的字符(在廣泛的版本,包括所有的Python 3.3 +):'ord(c)'可以採取超過四個十六進制數字。 – bobince

+0

如果這裏的目標是JavaScript,那麼可能並不重要。 JS的「\ u」轉義將需要BMP以外的代理對,並且此方法不會生成它們。在這一點上,你應該使用'json.dumps',即:'json.dumps(「」) - >「\ ud800 \ udf00 \ ud800 \ udf01 \ ud800 \ udf02」' – Seth

+0

也就是說, @尼基塔的回答。 :) – Seth

3

考慮你使用Python 3:

unicode_string="◣⛭◣◃✺▲♢" 
byte_string= unicode_string.encode('ascii', 'backslashreplace') 
print(byte_string) 

更多infotmation見codecs模塊文檔。

但是,使用JavaScript註釋工作,有一個特殊的模塊json,然後你可以做到同樣的事情:

import json 
unicode_string="◣⛭◣◃✺▲♢" 
json_string=json.dumps(unicode_string) 
print(json_string) 
+0

+1對於'json.dumps':使用正確的助手進行工作。 Python'unicode-escape'的語法與JSON/JavaScript不同(它會失敗基本多語言平面以外的字符:Python會說'\ U00001F4A9',其中JS需要'\ uD83D \ uDCA9') – bobince

相關問題