1. 程式人生 > >java字串亂碼過濾

java字串亂碼過濾

最近解決了一個困擾了很長時間的問題,就是關於中文亂碼的處理。。。找到相關方法

1.。如下:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
 
public class MessyCodeCheck { 
 
  public static boolean isChinese(char c) { 
    Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); 
    if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS 
        || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS 
        || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A 
        || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION 
        || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION 
        || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { 
      return true; 
    } 
    return false; 
  } 
 
  public static boolean isMessyCode(String strName) { 
    Pattern p = Pattern.compile("\\s*|\t*|\r*|\n

*"); 
    Matcher m = p.matcher(strName); 
    String after = m.replaceAll(""); 
    String temp = after.replaceAll("\\p{P}", ""); 
    char[] ch = temp.trim().toCharArray(); 
    float chLength = ch.length; 
    float count = 0; 
    for (int i = 0; i < ch.length; i++) { 
      char c = ch[i]; 
      if (!Character.isLetterOrDigit(c)) { 
 
        if (!isChinese(c)) { 
          count = count + 1; 
          System.out.print(c); 
        } 
      } 
    } 
    float result = count / chLength; 
    if (result > 0.4) { 
      return true; 
    } else { 
      return false; 
    } 
 
  } 
 
  public static void main(String[] args) { 
    System.out.println(isMessyCode("*??JTP.jar??????JTP?????????????")); 
    System.out.println(isMessyCode("你好")); 
  } 

2.如下:

/**   

          *  用getBytes(encoding):返回字串的一個byte陣列   

          *  當b[0]為  63時,應該是轉碼錯誤   

          *  A、不亂碼的漢字字串:   

          *  1、encoding用GB2312時,每byte是負數;   

          *  2、encoding用ISO8859_1時,b[i]全是63。   

          *  B、亂碼的漢字字串:   

          *  1、encoding用ISO8859_1時,每byte也是負數;   

          *  2、encoding用GB2312時,b[i]大部分是63。   

          *  C、英文字串   

          *  1、encoding用ISO8859_1和GB2312時,每byte都大於0;   

          *  <p/>   

          *  總結:給定一個字串,用getBytes("iso8859_1")   

          *  1、如果b[i]有63,不用轉碼;  A-2   

          *  2、如果b[i]全大於0,那麼為英文字串,不用轉碼;  B-1   

          *  3、如果b[i]有小於0的,那麼已經亂碼,要轉碼。  C-1   

          */  

        private  static  String  toGb2312(String  str)  {   

                if  (str  ==  null)  return  null;   

                String  retStr  =  str;   

                byte  b[];   

                try  {   

                        b  =  str.getBytes("ISO8859_1");   

                        for  (int  i  =  0;  i  <  b.length;  i++)  {   

                                byte  b1  =  b[i];   

                                if  (b1  ==  63)   

                                        break;    //1   

                                else  if  (b1  >  0)   

                                        continue;//2   

                                else  if  (b1  <  0)  {        //不可能為0,0為字串結束符   

                                        retStr  =  new  String(b,  "GB2312");   

                                        break;   

                                }   

                        }   

                }  catch  (UnsupportedEncodingException  e)  {   

                        //  e.printStackTrace();    //To  change  body  of  catch  statement  use  File    |  Settings    |  File  Templates.   

                }   

                return  retStr;   

        }   

 ---------------------------------------------------------------   

 String  str  =  "";   

 if  (request.getParameter("input")  !=  null)  {   

    str  =  request.getParameter("input");   

    if  (str.length()  ==  str.getBytes().length)   

        System.out.println("半形  character");   

    else  

        System.out.println("全形  character");   

 } 

過濾亂碼(可以哦,今天我去試了,用String newstr=new String(oldstr,"跟換不同編碼集例如utf-8");測試newstr是否為亂碼,若為亂碼繼續跟換編碼集生成newstr。。。一直到判斷為不是亂碼為止)希望高手多多指點。。。。

相關推薦

java字串亂碼過濾

最近解決了一個困擾了很長時間的問題,就是關於中文亂碼的處理。。。找到相關方法 1.。如下: import java.util.regex.Matcher;  import java.util.regex.Pattern;    public class MessyC

java 字串亂碼怎麼解決?

我嘗試了所有的設定編碼的方法: 1.重新給字串編碼再解碼 name = URLEncoder.encode(name, "ISO-8859-1");  name = URLDecoder.decode(name, "UTF-8"); 2.設定編碼 name=new S

Java 通過 JNA 呼叫 DLL 返回 char * 字串亂碼問題的解決

    最近一個 Java 專案需要呼叫公司的讀卡器讀取卡號。C 開發提供了一個讀取卡號的 DLL。     Java 呼叫 DLL 無非三種方法:JNI、JNA、JNative     本來 C 開發測試時用了 JNative.jar 來呼叫 DLL,但是網路上的 JNa

JAVA中文亂碼之解決方案

can tco con enc 字符 pos 好的 type nco 1.解決HTML頁面的中文問題:為了使HTML頁面很好的支持中文,在每個HTML頁面的<head>標簽內部增加(創建HTML頁面自帶) <head> <m

Java中文亂碼處理

art data- data XML direct 中文亂碼處理 new size tracking 一、處理get方法中文亂碼 方法1 String name = new String(request.getParameter("userName&

Java 敏感詞過濾Java 敏感詞替換,Java 敏感詞工具類

blog rds log code ima 方法 www enter iteye Java 敏感詞過濾,Java 敏感詞替換,Java 敏感詞工具類 =========================== ?Copyright 蕃薯耀 2017年9月25日 http:

java 中文亂碼問題,請註意response.getWriter的順序

pos 順序 getwriter .get post div writer 問題 mage 反例: 正例: java 中文亂碼問題,請註意response.getWriter的順序

Java中文亂碼&特殊字符解決方案

tco 其它 exce 相同 blog 選擇 misc black 是什麽 Java中文亂碼&特殊字符解決方案 相信很多朋友遇到過Java的亂碼問題,最近我也在解決一個“使用文本生成圖片過程中中文以及特殊字符亂碼”的問題;花了我大量時間,Debug了sun.font

為什麼要把Java字串設計為不可變的

String是Java中一個不可變的類,所以它一旦被例項化就無法被修改。不可變類一旦被建立就不可以被修改。本文將從記憶體、同步和資料結構相關知識簡單說明一下將String設計為不可變類的好處。 (1)字串池: 字串池是方法區中一部分特殊儲存。當一個字串被建立的時候,首先會去字串池

java字串和位元組的探討

網路通訊,嵌入式軟體 會發來資料包,經常以 16進位制字串表示例如  "45FF002C" 一個無符號整形 byte範圍可以是0~255, 1111 1111  java 中一個位元組 剛好可以用2個16進位制位表示:例如FF,但是java 的byte 不可以用 大於12

java字串提取數字

/** * 提取字串中的數字 * @param strInput * @return */ public static String getNum(String strInput) { //匹配指定範圍內的數字 Str

String.format() ------ java字串格式化

一、簡單介紹  1、作用:String類的format()方法用於建立格式化的字串以及拼接多個字串物件。 2、String.format()的兩種使用方式:   ①方式一:             &

java 字串擷取的幾種方式

java 字串擷取的幾種方式 1.split()+正則表示式來進行擷取。  將正則傳入split()。返回的是一個字串陣列型別。不過通過這種方式擷取會有很大的效能損耗,因為分析正則非常耗時。 String str = "abc,12,3yy98,0"; String[] strs

java 字串的比較與合併操作

1.字元的排序 2 種方法 public class Sort   {       public static void main(Stri

Java字串佔位符(commons-text)替換

  <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-text</artifactId>

記一次8086彙編除錯 關於編寫 7ch 中斷例程輸出字串亂碼

記一次8086彙編除錯 關於編寫 7ch 中斷例程輸出字串亂碼 輸出welcome to asm data segment DB 'welcome to asm ','$' data ends code segment start: mov ah,2 ;置游標 mo

Java 字串拼接 五種方法的效能比較分析 “+”、contact、join、append

一、五種方法分析: 1. 加號 “+” 2. String contact() 方法 3. StringUtils.join() 方法 4. StringBuffer append() 方法 5. StringBuilder append() 方法 二、優劣勢分析 開

java字串下劃線轉駝峰工具使用

java字串下劃線轉駝峰工具使用 public class StringUtil { private static final char UNDERLINE='_'; /** * 下劃線 轉 駝峰 * @param param * @return

java 字串與字元陣列相互轉化,字串與位元組陣列相互轉化

package com.liuxd; /** * Created by Liuxd on 2018-11-02. */ public class TestString { public static void main(String[] args) throws Exception

Java字串常用操作

String字串 查詢單引號裡的內容 // String regex = "'([^']*)'"; // 使用懶惰量詞 *? String regex = "'(.*?)'"; Pattern pattern = Pattern.compile(regex); Matcher matche