软件编程
位置:首页>> 软件编程>> java编程>> java web返回中文乱码问题及解决

java web返回中文乱码问题及解决

作者:瞌睡的猫00  发布时间:2023-08-25 08:23:08 

标签:java,web,返回,中文乱码

java web返回中文乱码

ajax返回中文乱码问题

在浏览器按F12查看数据包

可以看到charset为 iso-8859-1,这是spring处理的编码,需要在controller对应映射方法上添加

produces = {“text/html;charset=utf-8”}

java web返回中文乱码问题及解决

java中文乱码,编码识别测试汇总

1.手机显示中文:GBK,UTF-8正常,ISO-8859-1乱码。

2.写入内容到txt:UTF-8转GBK,直接stream.write(str.getBytes(StrCharset.GBK));无效。

发现前面多了个问号?直接删。暂时这样处理了。

if(StrCharset.getEncoding(str).equals(StrCharset.ISO_8859_1))
stream.write(str.getBytes(StrCharset.ISO_8859_1));
else if(StrCharset.getEncoding(str).equals(StrCharset.UTF_8))
{
try{
byte[] b=str.getBytes(StrCharset.GBK);
stream.write(b,1,b.length-1);
//stream.write(new String(str.getBytes("GBK"),"GBK").getBytes());
}catch(Exception e)
{
stream.write(str.getBytes(StrCharset.GBK));
}
}
else
stream.write(str.getBytes(StrCharset.GBK));
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));
}
}

java web返回中文乱码问题及解决

测试结果

// java获取字符串编码格式
public static String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GB2312
String s = encode;
return s; // 是的话,返回“GB2312“,以下代码同理
}
} catch (Exception exception) {
}
encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是ISO-8859-1
String s1 = encode;
return s1;
}
} catch (Exception exception1) {
}
encode = "UTF-8";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是UTF-8
String s2 = encode;
return s2;
}
} catch (Exception exception2) {
}
encode = "GBK";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GBK
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return "unknown"; // 如果都不是,说明输入的内容不属于常见的编码格式。
}

各种编码都显示出去看看

System.out.println("中文");
       System.out.println("中文".getBytes());
       System.out.println("中文".getBytes("GB2312"));
       System.out.println("中文".getBytes("ISO8859_1"));
       System.out.println(new String("中文".getBytes()));
       System.out.println(new String("中文".getBytes(), "GB2312"));
       System.out.println(new String("中文".getBytes(), "ISO8859_1"));
       System.out.println(new String("中文".getBytes("GB2312")));
       System.out.println(new String("中文".getBytes("GB2312"), "GB2312"));
       System.out.println(new String("中文".getBytes("GB2312"), "ISO8859_1"));
       System.out.println(new String("中文".getBytes("ISO8859_1")));
       System.out.println(new String("中文".getBytes("ISO8859_1"), "GB2312"));
       System.out.println(new String("中文".getBytes("ISO8859_1"), "ISO8859_1"));
//判断当前字符串的编码格式
if(destination.equals(new String(destination.getBytes("iso8859-1"), "iso8859-1")))
{
destination=new String(destination.getBytes("iso8859-1"),"utf-8");
}

来源:https://blog.csdn.net/lajiwaanyi/article/details/99721900

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com