怎么样检查前端传过来的String的编码?

开拓者Amadues 2020-10-16 04:23:03
数据库存储是utf-8,如果前端传过来的String不是utf-8的,应该怎么做检查,防止存到数据库里是乱码?
web容器有这样的检查吗?我用的是Tomcat。
...全文
9536 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2020-10-19
  • 打赏
  • 举报
回复
引用 2 楼 鸣鸣Amadues 的回复:
[quote=引用 1 楼 nayi_224 的回复:]每一个框架中都可以通过过滤器或者一些配置的方法解决编码问题。建议直接百度:[框架名] 字符集
不管是哪里处理,总得知道传过来的是什么编码才能转成需要的编码的吧?[/quote] 单纯校验的话,直接扒个工具类就行
import java.nio.charset.Charset;

public class Encoding
{
    public static String getEncoding(String str) 
    {    
        String encode;
		
	encode = "UTF-16";   		
        try 
	{    
            if(str.equals(new String(str.getBytes(), encode))) 
	    {   
                return encode;    
            }    
        } 
	catch(Exception ex) {} 
		
	encode = "ASCII";    
        try 
	{    
            if(str.equals(new String(str.getBytes(), encode)))
	    {    
                return "字符串<< " + str + " >>中仅由数字和英文字母组成,无法识别其编码格式";    
            }    
        } 
	catch(Exception ex) {}    
		
	encode = "ISO-8859-1";    
        try 
	{    
            if(str.equals(new String(str.getBytes(), encode))) 
	    {    
                return encode;    
            }    
        } 
	catch(Exception ex) {}    
		
	encode = "GB2312";    
        try 
	{    
            if(str.equals(new String(str.getBytes(), encode))) 
	    {    
                return encode;    
            }    
        } 
	catch(Exception ex) {} 
		
	encode = "UTF-8";    
        try 
	{    
            if(str.equals(new String(str.getBytes(), encode))) 
	    {    
                return encode;    
            }    
        } 
	catch(Exception ex) {}    
        
        /*
	 *......待完善
	 */
		
        return "未识别编码格式";    
    }  
 
    public static void main(String[] args)
    {
	//获取系统默认编码
	System.out.println("系统默认编码:" + System.getProperty("file.encoding")); //查询结果GBK
	//系统默认字符编码
	System.out.println("系统默认字符编码:" + Charset.defaultCharset()); //查询结果GBK
	//操作系统用户使用的语言
	System.out.println("系统默认语言:" + System.getProperty("user.language")); //查询结果zh
		
	System.out.println();
		
	String s1 = "hi, nice to meet you!";
	String s2 = "hi, 我来了!";
		
	System.out.println(getEncoding(s1));
	System.out.println(getEncoding(s2));
	}
}
开拓者Amadues 2020-10-18
  • 打赏
  • 举报
回复
引用 3 楼 KeepSayingNo 的回复:
最好直接在实体的属性上用validation的注解进行校验
怎么校验字符串是否是utf-8?
KeepSayingNo 2020-10-17
  • 打赏
  • 举报
回复
最好直接在实体的属性上用validation的注解进行校验
开拓者Amadues 2020-10-17
  • 打赏
  • 举报
回复
引用 1 楼 nayi_224 的回复:
每一个框架中都可以通过过滤器或者一些配置的方法解决编码问题。建议直接百度:[框架名] 字符集
不管是哪里处理,总得知道传过来的是什么编码才能转成需要的编码的吧?
nayi_224 2020-10-16
  • 打赏
  • 举报
回复
每一个框架中都可以通过过滤器或者一些配置的方法解决编码问题。建议直接百度:[框架名] 字符集

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧