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