2

我试图通过更改它们的字符代码来混淆一些 javascript,但我发现我无法在 Python 2.7 中正确打印超出特定范围的字符。

例如,这就是我想要做的:

f = open('text.txt','w')
f.write(unichr(510).encode('utf-8'))
f.close()

我不能写 unichr(510) 因为它说 ascii 编解码器超出范围。所以我用utf-8对其进行编码。这会将单个字符u'\u01fe'变成两个字符'\xc7\xbe'

现在,在 javascript 中,很容易获得字符代码 510 的符号:

String.fromCharCode(510)

给出单个字符:Ǿ

我用 Python 得到的是两个字符:Ǿ

如果我将这些字符传递给 javascript,我将无法检索原始的单个字符。

我知道可以在 python 中打印 Ǿ 字符,但我一直无法弄清楚。我已经使用 unichr() 而不是 chr(),并将其编码为“utf-8”,但我仍然不够用。我还读到 Python 3 在 chr() 函数中内置了这个功能。但这对我没有帮助。

有谁知道我怎样才能完成这项任务?

谢谢你。

4

3 回答 3

4

您应该以二进制模式打开文件:

f = open('text.txt','wb')

然后写入字节(在 Python 3 中):

f.write(chr(510).encode('utf-8'))

或者在 Python 2 中:

f.write(unichr(510).encode('utf-8'))

最后,关闭文件

f.close()

或者你可以像这样以更好的方式做到这一点:

>>> f = open('e:\\text.txt','wt',encoding="utf-8")
>>> f.write(chr(510))
>>> f.close()

之后,您可以将文件读取为:

>>> f = open('e:\\text.txt','rb')
>>> content = f.read().decode('utf-8')
>>> content
'Ǿ'

或者

>>> f = open('e:\\text.txt','rt',encoding='utf-8')
>>> f.read()
'Ǿ'

在我的 Win7 和 Python3 上测试。它应该适用于 Python 2.X

于 2013-04-08T01:25:49.887 回答
4

这个怎么样?

import codecs
outfile = codecs.open(r"C:\temp\unichr.txt", mode='w', encoding="utf-8")
outfile.write(unichr(510))
outfile.close()
于 2013-04-08T01:49:22.417 回答
1

Python 正在将字节写入'\xc7\xbe'文件:

In [45]: unichr(510).encode('utf-8')
Out[45]: '\xc7\xbe'

JavaScript 显然正在形成 unicode u'\xc7\xbe'

In [46]: 'Ǿ'.decode('utf-8')
Out[46]: u'\xc7\xbe'

In [47]: 'Ǿ'.decode('utf-8').encode('latin-1')
Out[47]: '\xc7\xbe'

问题在于 JavaScript 如何将字节转换为 unicode,而不是 Python 如何写入字节。

于 2013-04-08T01:25:41.213 回答