从字符串中获取转义的 unicode 代码

2024-01-03

我似乎遇到了与开发界其他人相反的问题。我需要从字符串生成转义字符。例如,假设我有这个词MESSAGE:,我需要生成:

\\u004D\\u0045\\u0053\\u0053\\u0041\\u0047\\u0045\\u003A\\u0053\\u0069\\u006D

我使用 Python 能得到的最接近的东西是:

u'MESSAGE:'.encode('utf16')
# output = '\xff\xfeM\x00E\x00S\x00S\x00A\x00G\x00E\x00:\x00'

我的第一个想法是我可以替换\x with \u00(或类似的东西),但我很快意识到这是行不通的。我该怎么做才能在Python中输出转义(未转义?)字符串(最好)?

在每个人开始“回答”和投反对票之前,逃脱者\u00...string 是我的应用程序从另一个我无法控制的第三方应用程序获取的内容。我正在尝试生成自己的测试数据,这样我就不必依赖第三方应用程序。


皮埃尔的回答几乎是正确的,但是for x in u'MESSAGE:'对于 U+FFFF 以上的字符,bit 将失败,但“窄版本”(主要是 Windows 上的 Python 1.6–3.2)除外,它使用 UTF-16 作为 Unicode 字符串。

在“广泛构建”上(在 3.3+ 中,区别不再存在),len(unichr(0x10000)) is 1 not 2。当此代码点采用 UTF-16BE 编码时,您会得到两个占用四个字节的代理项,因此输出为'\\uD800DC00'而不是你可能想要的,u'\\uD800\\uDC00'.

要在 Python 的两个变体上覆盖它,您可以执行以下操作:

>>> h = u'MESSAGE:\U00010000'.encode('utf-16be').encode('hex')
# '004d004500530053004100470045003ad800dc00'
>>> ''.join(r'\u' + h[i:i+4] for i in range(0, len(h), 4))
'\\u004d\\u0045\\u0053\\u0053\\u0041\\u0047\\u0045\\u003a\\ud800\\udc00'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从字符串中获取转义的 unicode 代码 的相关文章

随机推荐