讀TXT文件帶BOM問題

從文件中讀取數據對用戶名、密碼進行驗證,一開始出現從文件中讀取的數據帶BOM,與輸入的數據長度不一致,將文件轉爲不帶BOM(方法見utf-8 BOM批量轉換工具)後用equals比較還是不相同,最後只能自己寫了個比較的函數

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.FileReader"%>
<%@page import="java.io.Reader"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>check</title>
</head>
<body>
<%!
boolean eq(String s1,String s2){
    boolean b = true;    
    if(s1.length()==s2.length()){        
        for(int i=0;i<s2.length();i++){                        
            if(s1.charAt(i)!=s2.charAt(i)){
                b = false;
                break;
            }
        }
    }else{
        b=false;
    }
        return b;
}
%>
<%
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    boolean flag=false;
    String username=request.getParameter("username");
    String password=request.getParameter("password");         
     try {
        String path =  getServletContext().getRealPath("/student.txt");
        Reader in = new FileReader(path);
        BufferedReader f = new BufferedReader(in);        
        String line="";
        line = f.readLine();       
        while(line!=null) {
            String[] ss = line.split(" ");
            
            //String un = new String(ss[0].getBytes("UTF-8"),"UTF-8");
            //String pw = new String(ss[1].getBytes("UTF-8"),"UTF-8"); 
            //if("0111".equals(un)&&"11".equals(pw)){
            //if("0111".equals(username)&&"11".equals(password)){
            //if(un.equals(username)&&pw.equals(password)){
            //if(username.equals(ss[0])&&password.equals(ss[1])){
            //if(username.compareTo(ss[0])==0){

//註釋掉的是試過的方法都不行,現在從文件中讀出的數據與輸入的數據長度是一致的,

//不知道是不是編碼問題,始終比較結果爲不等
            if(eq(username,ss[0])&&eq(password,ss[1])){
                flag = true;
                break;
            }           
            line  = f.readLine();
        }
    }catch (Exception e) {
        e.printStackTrace();
    } 
    if(flag){
        out.println("ok");
       
    }else{
        out.println("學號或密碼錯誤!");
    }        
%>

</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章