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中文乱码,编码识别测试汇总
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获取字符串编码格式
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


猜你喜欢
- 在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下:static void Ma
- 之前的文章都是讲解springmvc+spring+mybatis 的整合,而很少有springmvc+spring+hibernate 因
- 本文实例讲述了C#实现的三种模拟自动登录和提交POST信息的方法。分享给大家供大家参考,具体如下:网页自动登录(提交Post内容)的用途很多
- Java7中文件IO发生了很大的变化,专门引入了很多新的类:import java.nio.file.DirectoryStream;imp
- 一、项目整体介绍:项目整体的结构如下图所示,项目整体采用 springboot + mybatis + jsp + mysql 来完成的,下
- 很多导航菜单是树形的,即一级一级往下分,这样的结构固然需要用递归来处理。 对于Freemarker 来说,宏就相当于函数,其定义了签名及参数
- 前言Android Studio是Google开发的一款面向Android开发者的IDE,支持Windows、Mac、Linux等操作系统,
- 举一个生活中的小例子,大凡开过学或者毕过业的都会体会到这样一种郁闷:你要去 n个地方办理 n 个手续(现在大学合并后就更加麻烦,因为可能那
- Lambda 表达式最早接触到 Lambda 表达式的时候,是在学习 python 的时候,当时就很好奇。后来,才发现 Java 也有这个方
- Android EditText限制输入字符类型的方法总结前言:最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方
- 1. 读取json file1.1 Json dependency<dependency> &nbs
- 实例如下:public string unicodetogb(string text) { &nbs
- 前言本文主要是将最近工作中遇到的一个问题进行总结分享,主要介绍的是如何让WebView中H5页面全屏播放视频。关于这个问题,做一下简单分析,
- 使用版本:spring-boot: 2.1.6.RELEASEsping: 5.1.8.RELEASEjava: openjdk 11.0.
- 使用RateLimiter通过AOP方式进行限流1、引入依赖<!-- guava 限流 --><dependency>
- unity通过GetVector,GetColor,GetFloat等获取。SetVector,SetColor,SetFloat等设置。这
- 在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果。但在多线程的异步开发
- C#定义多行字符串的方式在定义的前面加上@符号: string aa = @"asdfsdfsd &n
- 1、官网概括引用官网说法:The Java Virtual Machine defines various run-time data ar
- 在之前的文章中,我们介绍了JDK14中jstat工具的使用,本文我们再深入探讨一下jstack工具的使用。jstack工具主要用来打印jav