我试图通过改变他们的字符代码来混淆一些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()函数的此功能。但这对我没有帮助。
有谁知道如何完成这项任务?
谢谢。
答案 0 :(得分: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
答案 1 :(得分:4)
这个怎么样?
import codecs
outfile = codecs.open(r"C:\temp\unichr.txt", mode='w', encoding="utf-8")
outfile.write(unichr(510))
outfile.close()
答案 2 :(得分: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如何编写字节。