XML 文件解析--含Unicode字符的XML文件


         在最近的工做中須要使用XML文件作數據存儲,因爲此XML文件的內容是不一樣的數據來源的數據,在解析XML文件時,遇到幾處類似的異常:無效的XML字符 (Unicode: 0x9e)。 (Unicode: 0x8b)。算法

        Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 180; 在文檔的元素內容中找到無效的 XML 字符 (Unicode: 0x9e)。apache

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)app

at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)編碼

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)spa

at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)scala

at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)code

...xml

        

        一開始,試圖對XML文件進行不一樣格式的修改,UTF-8,ANBI等等,均無效(後來明白過來了,字符值根本沒有改變), 接着去尋找解決辦法,試圖把Unicode轉變爲UTF-8,也找了相關的算法,可是XML中僅僅含有幾處Unicode字符,也沒能解決。unicode

        後來找了一些資料發現這些字符有些共性:這些無效的字符在一些文檔中做爲文檔處理器的控制編碼(微軟選擇了那些再0x82到0x95之間的字符做爲"smart"標點),這些也被Unicode保留做爲控制編碼的,而且在XML中是不合法的。文檔

        

        在下面的網頁中有全部的Unicode字符,對應的UTF-8字符,以及它表明的意義

        http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=0x 


        最後我仍是把這些無效的Unicode字符轉變爲空字符(Scala代碼)

    def UnicodeStringHandler(value:String) = {
    	val chs = value.toArray
        for(i <- 0 until value.length()) {
          if (chs(i) > 0xFFFD)
            {
            chs(i) = ' ';
            } 
            else if (chs(i) < 0x20 && chs(i) != '\t' & chs(i) != '\n' & chs(i) != '\r')
            {
             chs(i) = ' ';
            }
            else if(chs(i) >= 0x80 && chs(i) <= 0x9f){
               chs(i) = ' ';
            }
        }
        new String(chs);
    }
相關文章
相關標籤/搜索