如何在Python中实现与JavaScript escape相同的字符串编码?
解决Python实现JavaScript escape()一致结果的问题
JavaScript的escape()函数对非ASCII的BMP(U+0000到U+FFFF)字符会生成%uXXXX格式的字符串,其中XXXX是四位大写十六进制码点。你之前用encode('ascii', 'backslashreplace')得到的是Python风格的\uXXXX字节序列,自然和预期不符,直接手动实现对应逻辑即可:
实现代码
def js_escape(s): escaped = [] for char in s: code = ord(char) # 处理ASCII字符:保留字母数字及*_+-./,其他转%XX格式 if code < 128: if char in r"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789*_+-./": escaped.append(char) else: escaped.append(f"%{code:02X}") # 处理BMP范围内的Unicode字符,转%uXXXX格式 else: escaped.append(f"%u{code:04X}") return ''.join(escaped)
测试验证
- 输入
js_escape('가온'),输出%uAC00%uC628,和JavaScript的escape('가온')结果完全一致。 - 输入
js_escape('누리'),输出%uB204%uB9AC,符合你需要的JS风格转义格式。
说明
Python的backslashreplace编码策略是将非ASCII字符转换为Python的转义字符串表示(如\uB204),这和JavaScriptescape()的%uXXXX格式规则不同,所以必须手动实现字符码点的格式化逻辑来匹配JS的行为。
内容的提问来源于stack exchange,提问作者shim robin
相关产品推荐
相关产品推荐

