2012-04-05 75 views
2

如何檢查上傳的文件是否爲ascii純文本?檢查ascii純文本

$("#my_file").change(function(){ 
    //alert if not ascii 
}); 
<input type="file" name="my_file" id="my_file" /> 
+1

當你要檢查嗎?上傳之前或之後? – 2012-04-05 05:14:12

+0

標記有一個名爲accept-charset的屬性。您可以將其設置爲ASCII。但我不確定瀏覽器是否會爲你做這項工作。 – Raze 2012-04-05 05:21:40

回答

5

使用HTML5 file APIs(這還沒有最終確認,而不是由所有主要瀏覽器的所有版本都支持),你可以通過FileReader.readAsBinaryString(file)讀取原始文件的內容,並確保每個字節(字符)在the ASCII character range值( 0-127)。

例如(see working jsFiddle here):

function ensureAsciiFile(evt) { 
    var file, files=evt.target.files; 
    for (var i=0; file=files[i]; i++) { 
    var reader = new FileReader(); 
    reader.onload = (function(theFile, theReader) { 
     return function(e) { 
     var fileContents = theReader.result; 
     if (fileContents.match(/[^\u0000-\u007f]/)) { 
      alert('ERROR: non-ASCII file "' + theFile.name + '"'); 
     } else { 
      alert('OK: ASCII file "' + theFile.name + '"'); 
     } 
     }; 
    })(file, reader); 
    reader.readAsBinaryString(file); 
    } 
} 
$('#my_file').change(ensureAsciiFile); 
+0

您可能可以使用正則表達式來測試flie而不是遍歷每個字符。 – RobG 2012-04-05 05:26:57

+0

@RobG:對,更聰明 - 謝謝=) – maerics 2012-04-05 05:30:37

+1

測試ASCII字符集:'var re = new RegExp('[^ \\ u0000 - \\ u007f]');'這樣RegExp're.test (字符串)'將返回真,如果有一個字符範圍在0-128(十進制)以外; – RobG 2012-04-05 05:55:22