如何在python中转义UNICODE字符串(到javascript转义)

时间:2016-02-13 17:53:15

标签: javascript python unicode

我有以下字符串"◣⛭◣◃✺▲♢",我想将该字符串变为"\u25E3\u26ED\u25E3\u25C3\u273A\u25B2\u2662"。与此网站完全相同https://mothereff.in/js-escapes

我想知道这在python中是否可行。我已经尝试过来自unicode docs for python的所有东西,但却失败了。

我以前尝试过的例子:

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

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

print(ord(f[:1]))

帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

考虑到你正在使用Python 3:

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

有关更多信息,请参阅codecs模块文档。

但是,要使用JavaScript表示法,有一个特殊的模块json,然后你可以实现同样的目的:

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

答案 1 :(得分:0)

如果你在python 2中,那么我怀疑你会得到这样的东西:

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

要获取UTF-8编码文件(或缓冲区)中的unicode代码点,首先需要decode将其转换为python unicode对象(否则您将看到构成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'

当然,当您以这种方式进行转换时,您将显示所有字符串中字符的代码点。您必须决定显示哪些代码点,否则ABC也将被转义:

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

或者,只需使用georg的建议让python为你解决所有问题。