java代码实现判断字符串是否为乱码
作者:刘大猫.
这篇文章主要为大家详细介绍了如何使用java代码实现判断字符串是否为乱码,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下
一、介绍
字符串乱码检测:一个简单但局限的实现方案
这段代码实现了一个基于ASCII可打印字符范围的乱码检测函数,通过正则表达式判断字符串是否包含非标准ASCII字符。
public static boolean isGarbage(String str) {
//检查字符串是否为空
if (str == null I str.isEmpty()) {
return true;//认为空字符串是乱码
}
//使用正则表达式检查字符串是否只包含可打印字符
//可打印字符范围:0x20(space)到0x7E(tide)
return !str.matches("[\\x20-\\x7E]*");
}工作原理:
- 正则表达式[\\x20-\\x7E]*匹配所有ASCII可打印字符(空格到波浪号)
- 如果字符串完全由这些字符组成,返回false(不是乱码)
- 否则返回true(认为是乱码)
二、代码
public class StringUtils {
// 判断字符串是否为乱码
public static boolean isGarbage(String str) {
// 检查字符串是否为空
if (str == null || str.isEmpty()) {
return true; // 认为空字符串是乱码
}
// 使用正则表达式检查字符串是否只包含可打印字符
// 可打印字符范围: 0x20 (space) 到 0x7E (tilde)
// 这里可以根据实际需求调整
return !str.matches("[\\x20-\\x7E]*");
}
public static void main(String[] args) {
String test1 = "�����������"; // 乱码
String test2 = "W1111A1111"; // 正常字符串
System.out.println("Test 1 is garbage: " + isGarbage(test1)); // true
System.out.println("Test 2 is garbage: " + isGarbage(test2)); // false
}
}
三、方法补充
1.java判断字符串是否为乱码
java.nio.charset.Charset.forName("GBK").newEncoder().canEncode("测试") //判断是不是GBK编码 即是否乱码
//使用request.getQueryString()获取通过URL传过来的值 有可能是乱码 如:q=鿥
String s = request.getQueryString();
if(s!=null){
if(!(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(s))){
try {
s = new String(request.getQueryString().getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}2.Java判断文字是否乱码
该代码段提供了一个Java方法,用于检测字符串是否包含乱码。它首先去除字符串中的空白字符和标点符号,然后判断剩余字符是否为数字、英文或中日韩文字。如果非这些字符的比例超过40%,则认为字符串包含乱码。
/**
* 判断字符串是否是乱码
*
* @param strName 字符串
* @return 是否是乱码
*/
public static boolean isMessyCode(String strName) {
float count = 0;
//去除字符串中的空格 制表符 换行 回车
Pattern p = Pattern.compile("\\s*|\t*|\r*|\n*");
Matcher m = p.matcher(strName);
String after = m.replaceAll("");
//去除字符串中的标点符号
String temp = after.replaceAll("\\p{Punct}", "").replaceAll("“|”|!|:|,|?|、|…|\\+","").replaceAll(" ","").replaceAll("\\s\\S*","");
//处理之后转换成字符数组
char[] ch = temp.trim().toCharArray();
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
//判断是否是数字或者英文字符
if (!judge(c)) {
//判断是否是中日韩文
if (!isChinese(c)) {
//如果不是数字或者英文字符也不是中日韩文则表示是乱码返回true
//System.out.println(c);
count++;
}
}
}
float rate = count/ch.length;
if(rate>0.4){
return true;
}
//表示不是乱码 返回false
return false;
}
public static boolean judge(char c){
if((c >='0' && c<='9')||(c >='a' && c<='z' || c >='A' && c<='Z')){
return true;
}
return false;
}
/**
* 判断是否是中日韩文字
* @param c 要判断的字符
* @return true或false
*/
private 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;
}3.java如何判断字符串是否有乱码
要判断字符串是否有乱码,我们可以依据以下几个步骤:
- 指定编码:确定我们期望使用的字符编码( UTF-8、GBK等等)。
- 验证编码:尝试将字符串编码为字节数组,然后再以相同编码解码回来,最后检查解码后的结果是否与原始字符串一致。
- 检测非法字符:对字符串进行逐字符检查,判断是否存在未能正确解码的字符。
- 返回结果:根据上述判断结果输出是否存在乱码。
代码示例
import java.nio.charset.Charset;
public class StringValidator {
/**
* 根据指定编码判断字符串是否有乱码
*
* @param str 待检测的字符串
* @param charsetName 指定的字符编码
* @return 如果字符串有乱码返回true,反之返回false
*/
public static boolean hasGarbage(String str, String charsetName) {
if (str == null || charsetName == null) {
return false; // null 时不判断
}
Charset charset = Charset.forName(charsetName);
try {
// 将字符串编码为字节数组
byte[] bytes = str.getBytes(charset);
// 用相同的编码解码
String decodedStr = new String(bytes, charset);
// 判断原字符串和解码后的字符串是否一致
return !str.equals(decodedStr);
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
return true; // 捕获异常时认为有乱码
}
}
public static void main(String[] args) {
String testStr = "测试字符串"; // 需要测试的字符串
String charset = "UTF-8"; // 可选的编码格式
boolean result = hasGarbage(testStr, charset);
if (result) {
System.out.println("字符串存在乱码");
} else {
System.out.println("字符串无乱码");
}
}
}代码解析
hasGarbage方法:此方法负责判断输入的字符串是否有乱码。首先,输入参数为待验证的字符串和字符编码。- 编码与解码:使用
getBytes方法将字符串转换为字节数组,再用new String构造函数基于相同字符集进行解码。 - 比较原字符串与解码字符串:若两者不相等,则表示存在乱码。
- 异常处理:在处理时对可能出现的异常进行捕获,并返回有乱码的结果。
到此这篇关于java代码实现判断字符串是否为乱码的文章就介绍到这了,更多相关java字符串判断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
