我似乎遇到了与开发界其他人相反的问题。我需要从字符串生成转义字符。例如,假设我有这个词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(使用前将#替换为@)