expected此編譯錯誤如何解決?
eclipse 中遇到了Syntax error on token "Invalid Character", delete this token的錯誤提示,看代碼是完全沒有問題,上網查了半天發現遇到這個問題的好像不太多,總結一下問題原因和解決方案吧。
看到這個提示首先想到的是標點符號不是不是中文,或者全角半角的問題了,通過檢查,這種問題并不存在。
然后看到一個帖子說用Android Studio引入eclipse項目時遇到了同樣的錯誤,原因是eclipse和idea對同樣編碼utf-8的細節不一致,一個有BOM,一個沒有。
什么是BOM呢?BOM的全稱是:Byte order mark。UTF-8以字節為編碼單元,沒有字節序的問題。UTF-16以兩個字節為編碼單元,在解釋一個UTF-16文本前,首先要弄清楚每個編碼單元的字節序。例如收到一個“奎”的Unicode編碼是594E,“乙”的Unicode編碼是4E59。如果我們收到UTF-16字節流“594E”,那么這是“奎”還是“乙”?Unicode規范中推薦的標記字節順序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。在UCS編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的編碼是FEFF。而FFFE在UCS中是不存在的字符,所以不應該出現在實際傳輸中。UCS規范建議我們在傳輸字節流前,先傳輸字符"ZERO WIDTH NO-BREAK SPACE"。這樣如果接收者收到FEFF,就表明這個字節流是Big-Endian的;如果收到FFFE,就表明這個字節流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被稱作BOM。
UTF-8不需要BOM來表明字節順序,但可以用BOM來表明編碼方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8編碼是EF BB BF。所以如果接收者收到以EF BB BF開頭的字節流,就知道這是UTF-8編碼了。
通過UE查看文件的16進制形式,發現開頭包含EF BB BF串,eclipse不對其做識別而作為普通的字符處理,因此報錯。
問題定位到該怎么解決呢?
解決方法:
1.使用UE或者其他文本工具,將有問題的java文件另存為UTF-8,無BOM,替換原來的java文件。
2.使用eclipse自建的文件編碼,盡量不要從其他地方拷貝代碼