如何在Python 2.7中将非ascii字符打印到文件

时间:2013-04-08 01:17:00

标签: javascript python character-encoding special-characters

我试图通过改变他们的字符代码来混淆一些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()函数的此功能。但这对我没有帮助。

有谁知道如何完成这项任务?

谢谢。

3 个答案:

答案 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如何编写字节。