2

文字コードを変更して一部の JavaScript を難読化しようとしていますが、Python 2.7 では特定の範囲外の文字を正しく出力できないことがわかりました。

たとえば、これが私がやろうとしていることです:

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

ascii コーデックが範囲外であると表示されているため、unichr(510) を書き込むことができません。なのでutf-8でエンコードします。これにより、1 文字u'\u01fe'が 2文字になり'\xc7\xbe'ます。

さて、JavaScript では、文字コード 510 の記号を簡単に取得できます。

String.fromCharCode(510)

1 文字を与えます: Ǿ

Python で得られるのは Ǿ の 2 文字です。

これらの文字を JavaScript に渡すと、元の 1 文字を取得できません。

python で Ǿ 文字を出力できることは知っていますが、それを理解することはできませんでした。chr() の代わりに unichr() を使用し、それを「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'

問題は、Python がバイトを書き込む方法ではなく、JavaScript がバイトを Unicode に変換する方法にあります。

于 2013-04-08T01:25:41.213 に答える