2013-04-08 201 views
2

我想通過改變它們的字符代碼來模糊一些javascript,但是我發現我無法在Python中正確打印特定範圍之外的字符2.7。如何在Python 2.7中打印非ASCII字符文件

例如,這裏就是我想要做的事:

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得到的是兩個字符:CH 2

如果我將這些字符傳遞給javascript,我無法檢索原始單個字符。

我知道可以在python中打印Ǿ字符,但我一直無法弄清楚。我已經使用unichr()而不是chr(),並將其編碼爲'utf-8',但我仍然缺乏。我還讀過Python 3內置chr()函數的這個功能。但那不會幫助我。

有誰知道我該如何完成這項任務?

謝謝。

+0

你是怎麼把''xc7 \ xbe''傳給JavaScript的?這兩個連續的字節(不要與字符混淆)是UT的UTF-8編碼,JavaScript應該這樣認識(或者至少與UT出現在UTF-8編碼的JS文件中一樣)。 – jwodder 2013-04-08 01:22:31

+0

我將''\ xc7 \ xbe''保存爲一個JavaScript文件。另外,它將它視爲兩個獨立的字符。 @jwodder – bozdoz 2013-04-08 01:25:10

回答

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

+0

似乎沒有改變。仍然得到這兩個字符。 – bozdoz 2013-04-08 01:27:17

+0

你是如何閱讀該文件的? – Sheng 2013-04-08 01:30:54

+0

在文本編輯器中打開該文件。 – bozdoz 2013-04-08 01:31:18

1

Python是寫字節'\xc7\xbe'到文件:

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

JavaScript是顯然形成統一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如何寫字節。

+0

該文件是JavaScript。我用for循環解碼js,並用這樣的東西來調整每個字符:String.fromCharCode(l.charCodeAt(i) - 150); – bozdoz 2013-04-08 01:30:00

+0

另外,通過查看Python應該寫入一個字符的文件,我可以看到Python正在寫入兩個字符。 – bozdoz 2013-04-08 01:30:52

+0

for循環旨在遍歷每個字符,因此它遍歷每個字節,這不是我想要的。 – bozdoz 2013-04-08 01:32:42

4

這個怎麼樣?

import codecs 
outfile = codecs.open(r"C:\temp\unichr.txt", mode='w', encoding="utf-8") 
outfile.write(unichr(510)) 
outfile.close() 
+0

這對我來說非常適合使用python 2.7,謝謝。 – pshep123 2017-06-27 21:02:38