2010-08-12 53 views
3

我嘗試使用Python涅槃之前串聯在一起的幾個JavaScript文件的開頭,基本上像這樣:Python的file.read()看到垃圾字符的文件

outfile = open("output.js", "w") 
for somefile in a_list_of_file_names: 
    js = open(somefile) 
    outfile.write(js.read()) 
    js.close() 
outfile.close() 

的minifier抱怨關於每個文件開頭的非法字符和語法錯誤,所以我做了一些診斷。

>>> r = open("output.js") 
>>> somestring = r.readline() 
>>> somestring 
'\xef\xbb\xbfvar $j = jQuery.noConflict(),\n' 
>>> print somestring 
var $j = jQuery.noConflict(), 

該文件的第一行當然應該是「變量$ J = jQuery.noConflict(),」

如果它的確與衆不同,我從Windows中工作。

有什麼想法?

編輯:這就是我從minifier獲得:

U:\>java -jar c:\path\yuicompressor-2.4.2.jar c:\path\somefile.js -o c:\path\bccsminified.js --type js -v 

[INFO] Using charset Cp1252 

[ERROR] 1:2:illegal character 

[ERROR] 1:2:syntax error 

[ERROR] 1:3:illegal character 
+1

如果你打印somefile.readline()'會發生什麼?如何在記事本中打開文件? – katrielalex 2010-08-12 15:16:19

+0

是的, 打印somefile.readline() 生成相同的垃圾。當我在記事本中打開文件時,出於某種奇怪的原因,它以較小的字體顯示第一行。 Visual Studio拒絕打開它。在擺弄它之後,記事本不再顯示它,並且Visual Studio將其打開,但縮小器仍會拋出錯誤。 – Chris 2010-08-12 15:23:34

回答

4

EF BB BF是一個Unicode字節順序標記(BOM)。那些實際上在你的文件中。這就是Python看到它的原因。

要麼忽略/放棄BOM或重新編碼文件以忽略它。

+0

你完全正確。通過YUIcompressor文檔挖掘,我發現了對--charset標誌的提及。設置爲utf-8解決了我的擔憂。 – Chris 2010-08-12 16:22:55

5

這是一個UTF-8 BOM(字節順序標記)。你可能用記事本編輯了文件。