2011-08-12 84 views
0

我想解析一些使用代碼項目分析器發現的css文件here。基本上我需要從ftp獲取一個css文件將其轉換爲一個字符串,解析它,以便枚舉css類。使用默認的.net ftp客戶端,返回的字符串與解析器一起工作正常。使用我們在項目中使用的ftp解析器失敗(CuteFTP)。這是事情變得奇怪的地方。從我已經能夠告訴兩個css文件返回的字符串是相同的,它們來自同一個css文件。那麼,爲什麼一個工作,另一個失敗,是否有一些隱藏的格式?我已經確認這兩個ftp客戶端都使用utf8編碼。以下是以字符串形式返回的兩個css類。我上傳了一個顯示問題here的vs2010項目。任何幫助將不勝感激...這是讓我撓頭的問題之一。由於CSS解析編碼問題?

string cssThatWorks = "\r\n.uploadfiles_button{\r\n color:#529214; \r\nborder:1px solid #C6D880;\r\ndisplay:inline-block;\r\n margin:0 7px 0 0;\r\n font-family:\"Lucida Grande\", Tahoma, Arial, Verdana, sans-serif;\r\n font-size:12px;\r\n line-height:130%;\r\n text-decoration:none;\r\n font-weight:bold;\r\n cursor:pointer;\r\n padding:5px 10px 6px 7px; \r\n}\r\n\r\n\r\n\r\n"; 

string cssThatFails = "\r\n.uploadfiles_button{\r\n color:#529214; \r\nborder:1px solid #C6D880;\r\ndisplay:inline-block;\r\n margin:0 7px 0 0;\r\n font-family:\"Lucida Grande\", Tahoma, Arial, Verdana, sans-serif;\r\n font-size:12px;\r\n line-height:130%;\r\n text-decoration:none;\r\n font-weight:bold;\r\n cursor:pointer;\r\n padding:5px 10px 6px 7px; \r\n}\r\n\r\n\r\n\r\n"; 

更新

它看起來像有在字符串的開頭UTF8標識,所以我增加了以下代碼,應將其刪除。傳遞給構造函數的真實值應該跳過它,但它不會。有任何想法嗎?

UTF8Encoding utf8 = new UTF8Encoding(true); 
    Byte[] encodedBytes = utf8.GetBytes(cssThatFails); 
    string cssWithoutUTF8Identifier = utf8.GetString(encodedBytes); 

回答

1

我從TextPad中的示例項目打開Default.aspx.cs文件,並看到'?'字符在「cssThatFails」字符串的開頭,表示未知字符。所以我在VS的二進制編輯器中打開了相同的文件,並注意到「cssThatFails」字符串在開頭處具有UTF-8字節順序標記(0xEFBBBF)。這是可能的罪魁禍首。

+0

感謝您的關注。除了刪除第一個字符之外,我會如何解釋? – NullReference

+0

C#中的所有字符串都在內存中表示爲UTF16,因此應該修剪等效的UTF16 BOM。 'string cssWithoutUTF8Identifier = cssThatFails.TrimStart(new char [] {'\ xFEFF','\ xFFFE'});' – bbogovich

+0

在這裏找到了解決方案http://stackoverflow.com/questions/1317700/strip-byte-order-mark - 從串式-C – NullReference