org.teldap.core.xmlvalidator.util.encoding
Class ValidCharacter

java.lang.Object
  extended by org.teldap.core.xmlvalidator.util.encoding.ValidCharacter

public class ValidCharacter
extends java.lang.Object

Copyright 2009 數位典藏與數位學習國家型科技計畫(TELDAP) 數位核心平台計畫

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Title: 檢查檔案是否有亂碼,以及是否有合理使用字元參引

Version:
1.0
Author:
徐慈妍、洪崇熙、洪國翔

Field Summary
static java.util.ArrayList alCorrectCode
           
 
Constructor Summary
ValidCharacter()
           
 
Method Summary
 java.util.HashMap collectMsg(java.io.File des)
           
 java.lang.StringBuffer getStringBuffer(java.io.File file)
           
 boolean hasUnknownWords(java.io.File file)
          是否有亂碼:依據我們過去經手處理過的XML檔案,各個機構單位將資料從資料庫轉出成XML時,由於編碼的問題未妥善處理,經常在我方接收的檔案裡會出現亂碼,這種編碼問題並非是採用非指定的編碼方式,而是經過錯誤轉換後的字元用Big5編碼儲存了起來。
 boolean isWordReferenceValid(java.io.File file)
          字元參引(NCR 或 Entity Reference)是否符合格式:字元參引會使用在兩個時機,使用時機之一是當字元無法用Big5編碼時,譬如使用外來語,像是日文或韓文,此時則必須用數字字元參引(NCR=Numeric Character Reference)來表示該字元。
 void loadBig5Code()
          載入中文字UTF-8,Big5碼對照表
 boolean validateEntityReference(java.io.File file)
          字元參引是否合理使用:因為每個中文字皆有可表示的字元參引,在疏忽的情況下偶會出現整個檔案的文字都用字元參引表示,為了能夠檢測出這樣的檔案,防止連一般的中文字都用字元參引表示,檔案內出現的字元參引都必須經由比對一份字元編碼表(中文字UTF- 8,Big5碼對照表),以確定檔案內的字元參引的確是表示Big5缺漏的中文字。
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

alCorrectCode

public static java.util.ArrayList alCorrectCode
Constructor Detail

ValidCharacter

public ValidCharacter()
Method Detail

loadBig5Code

public void loadBig5Code()
載入中文字UTF-8,Big5碼對照表


getStringBuffer

public java.lang.StringBuffer getStringBuffer(java.io.File file)

hasUnknownWords

public boolean hasUnknownWords(java.io.File file)
是否有亂碼:依據我們過去經手處理過的XML檔案,各個機構單位將資料從資料庫轉出成XML時,由於編碼的問題未妥善處理,經常在我方接收的檔案裡會出現亂碼,這種編碼問題並非是採用非指定的編碼方式,而是經過錯誤轉換後的字元用Big5編碼儲存了起來。通常這樣的錯誤,也是要通過人去判讀檔案才會知道,但是我們發現某些符號會伴隨著亂碼大量出現,像是字元U+FFFF、U+003F、U+25A1 ,因此我們設定當這三個字元在檔案中出現的總數超過15時,則認定此檔案很可能內含有大量的亂碼。雖然這個方法容易有例外的情形發生,但這個方法已經可以幫助過濾目前所知的亂碼檔案。

Parameters:
file - File XML檔案
Returns:
boolean true-檔案未含有亂碼

isWordReferenceValid

public boolean isWordReferenceValid(java.io.File file)
字元參引(NCR 或 Entity Reference)是否符合格式:字元參引會使用在兩個時機,使用時機之一是當字元無法用Big5編碼時,譬如使用外來語,像是日文或韓文,此時則必須用數字字元參引(NCR=Numeric Character Reference)來表示該字元。數字字元參引有兩種表示格式: &#dddd; 或 &#xhhhh;,其中dddd是字元在unicode的10進位值,而hhhh則是字元在unicode的16進行值,所以dddd及hhhh 此兩者的值是相等的。以一個字為例:「秘」在unicode的10進位值為31192,16進位值為79D8,所以「秘」的數字字元參引可表示為&#31192;或&#x79D8;。第二個使用字元參引的時機是碰到XML的5個特殊字元時,包括< > ' & ",必須分別用&lt; &gt; &apos; &amp; &quot;代替。字元參引會出現格式上的錯誤是源於這個字元「&」,「&」是字元參引表示法的字首,又是XML的其中一個特殊字元,所以有些粗心的資料處理人員,會將正確的字元參引經過替換XML特殊字元後而變成錯誤者,如&#25105;轉變成&amp;#25105;。所以凡是檔案中的字元參引格式不符合&#dddd;或 &#xhhhh;或&lt; &gt; &apos; &amp; &quot;者,則假設檔案可能有此項錯誤存在。

Parameters:
file - File XML檔案
Returns:
boolean true-字元參引符合格式

validateEntityReference

public boolean validateEntityReference(java.io.File file)
字元參引是否合理使用:因為每個中文字皆有可表示的字元參引,在疏忽的情況下偶會出現整個檔案的文字都用字元參引表示,為了能夠檢測出這樣的檔案,防止連一般的中文字都用字元參引表示,檔案內出現的字元參引都必須經由比對一份字元編碼表(中文字UTF- 8,Big5碼對照表),以確定檔案內的字元參引的確是表示Big5缺漏的中文字。我們設定當不合理的字元參引出現超過10次,則假設檔案可能有此項錯誤存在。

Parameters:
file - File XML檔案
Returns:
boolean true-未有不合理的字元參引

collectMsg

public java.util.HashMap collectMsg(java.io.File des)