コードプロジェクトパーサーhereを使用していくつかのCSSファイルを解析しようとしています。基本的に私はftpからCSSファイルを取り出して文字列に変換し、解析してCSSクラスを列挙できるようにする必要があります。デフォルトの.net ftpクライアントを使用すると、返された文字列はパーサで正しく動作します。プロジェクトで使用しているftpパーサを使用すると失敗します(CuteFTP)。これは物事が奇妙になる場所です。私が文字列として返される2つのcssファイルが同じものであることを伝えることができたことから、同じcssファイルから来ています。だから、なぜ1つは動作し、もう1つは失敗するでしょうか、いくつかの隠しフォーマットがありますか?私は両方のFTPクライアントがutf8エンコーディングを使用していることを確認しました。以下は、文字列として返される2つのCSSクラスです。 hereという問題を示すvs2010プロジェクトをアップロードしました。どんな助けでも大歓迎です...これは私の頭を傷つけている問題の一つです。私はそれを削除する必要があり、次のコードを追加した文字列の先頭にUTF8識別子があるようおかげ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";
アップデートは
に見えます。コンストラクタに渡されたtrueはスキップする必要がありますが、コンストラクタはスキップしません。何か案は?
UTF8Encoding utf8 = new UTF8Encoding(true);
Byte[] encodedBytes = utf8.GetBytes(cssThatFails);
string cssWithoutUTF8Identifier = utf8.GetString(encodedBytes);
ありがとうございます。最初の文字を取り除く以外の方法はどうすればいいですか? – NullReference
C#のすべての文字列はメモリ内のUTF16として表されるため、同等のUTF16 BOMをトリミングすると機能するはずです。 '文字列cssWithoutUTF8Identifier = cssThatFails.TrimStart(新しいchar [] {' \ xFEFF '、' \ xFFFE '});' – bbogovich
ここに解決策が見つかりましたhttp://stackoverflow.com/questions/1317700/strip-byte-order-mark -from-string-in-c – NullReference