如何在Python中自动转义特殊字符但不转义字母?

3 投票
3 回答
2416 浏览
提问于 2025-04-16 16:41

我在用Python写代码,里面有一些特殊字符,比如双引号和非英语字符。

我想自动处理这些特殊字符,但当我使用re.escape时,它把所有非英语字符也处理了。我不太确定这样做是否正确。

这就有点麻烦,因为当我的Python代码生成包含这些unicode字符的JavaScript时,JavaScript会输出一个HTML元素,里面多了很多不必要的斜杠。

我哪里做错了呢?

这是生成的JavaScript代码:

var myString='\ע\נ\ב\ר'

它应该是

var myString='ענבר'

更新: 我用了json.dumps(...),但它在前后加了额外的引号。有没有人知道怎么去掉这些引号?

3 个回答

0

你可以从 strunicode 这两个类创建自己的字符串类,并重写它的 __str__() 方法。这个方法在你打印这个对象的时候会被调用。在你自定义的方法里,你可以对字符进行任何你想要的处理,比如转义字符。一个实现方式是先调用父类的方法,然后对它的输出结果进行后续处理。

0

这完全取决于你想要编码的特殊字符是什么。re.escape 是用来处理在正则表达式中有特殊意义的字符的,它对其他的字符并不太在意。

也许 urllib.quote 更适合你的需求(然后可以在 JavaScript 中使用类似 decodeURI() 的方法)。或者可能

2

最后我用了这个:

json.dumps(myString, ensure_ascii=False)

到现在为止效果还不错。这个额外的参数让它保持了unicode格式。

(不过它会在包含unicode字母的部分前后加上额外的引号,所以我用了 myString = myString[1:-1]。这样有点不太好看,也许还有更好的办法……)

撰写回答