java中是如何解决编码问题的,在java中,关于编码规范的说法,错误的是

本文目录一览:

如何解决JavaEE开发中字符编码出现乱码问题

1、浏览器调用jsp,html等页面中文显示乱码

此情况需满足两个要求:

(1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)

(2)浏览器用utf-8解析:

(手动)== 在浏览器中右键选择编码格式为utf-8

(智能)== 在文件中写入如: meta name=”content-type” content=”text/html; charset=UTF-8″ 通过meta标签模拟response头,起到告诉浏览器用utf-8的编码解析

(智能)== response.setContentType(“text/html;charset=UTF-8”);起到告诉浏览器用utf-8的编码解析

常用:

meta name=”content-type” content=”text/html; charset=UTF-8″或meta charset=”utf-8″

%@ pageEncoding=”utf-8″%

?xml encoding=”UTF-8″?

2、通过浏览器调用servlet,页面显示乱码。

Servlet乱码分为request乱码和response乱码;

(1)response乱码问题

解决方法:

在网上很有效的解决方法是添加:

response.setCharacterEncoding(“UTF-8”);

解决不了,后来又搜到一条解决方法是:

response.setContentType(“text/html;charset=utf-8”);或者 response.setHeader(“content-type”,”text/html;charset=UTF-8″);告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)

两句都填上,后来终于解决了这个问题;

其实我们应该思考一下本质:

response.setContentType(“text/html;charset=UTF-8”); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;

response.setCharacterEncoding(“UTF-8”);目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;

java中编码与解码分别指什么?

java中编码:URLEncoder.encode(strUri,”utf-8″);

java中解码码:URLDecoder.decode(strUri,”utf-8″);

java编码和解码        

流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,

构造器有如:

InputStreamReader(InputStream in, String charsetName)

创建使用指定字符集的 InputStreamReader。

OutputStreamWriter(OutputStream out, String charsetName)

创建使用指定字符集的 OutputStreamWriter。

处理字符串编码问题:

重新对获取的字符串进行编码:Byte[] bytes = str.getBytes(String encodeCharsetNam);

重新对bytes进行解码,创建新的字符串对象:str = new String(Byte[] bytes,String decodeCharsetName);

一般结合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);

例如:resultName=new String(username.getBytes(“ISO-8859-1″),”UTF-8”);

还可以加入判断:

if(!Charset.forName(“gbk”).newEncoder().canEncode(str)){str = new Strin(str.getBytes(“ISO-8859-1″),”UTF-8”);}else{str = new String(str.getBytes(“ISO-8859-1″),”gbk”);}

处理请求参数传递编码问题:

java中编码:URLEncoder.encode(strUri,”utf-8″);

java中解码码:URLDecoder.decode(strUri,”utf-8″);

js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);

js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);

补充概念:

URI组件:主机、端口、路径、查询参数、片段等。

URI组件分隔符::/?#[]@,冒号用于分隔协议和主机,/用于分隔主机和 路径,?用于分隔路径和查询参数,用于分隔多个查询参数等。

URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ = + $ , / ? # [ ] 他们具有特殊作用,例如上面的分隔作用。

URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用。

js向java/jsp的编码与解码:

js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));

java/jsp中解码: java.net.URLDecoder.decode(strUri,”UTF-8″);

js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。

然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。

JAVA 字符串 字节 编码问题 高手来

1.

编程序的时候如果:String

str=”中文”;在存成文件时,需要把这段文字存为数据(每个字节byte=8bit),即要编码,按照不同的编码方式(比如gb2312或者unicode),所以保存文件的时候需要指定编码,一般编辑器默认跟系统一致。java编译器,将源程序编码时,采用的是unicode编码方式,所以存在class文件中的字节码里的中文常量也是unicode的。这是源程序

2.

在程序处理时,你如果想把str=”中文”,以一定的编码方式变成存储时的数据(byte数组),就需要str.getBytes(“encoding”),同理,你从文件或者其他地方读取到数据后,想转换成字符串,那么你就要知道他之前是用什么编码方式变成的数据,然后用new

String(bytes,

“encoding”)

就可以了。

如何解决Java中的中文乱码问题

对于Java,由于默认的编码方式是UNICODE,所以用中文也易出问题,常见的解决是:

String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);

1、utf8解决JSP中文乱码问题

一般说来在每个页面的开始处,加入:

%@ page language=”java” contentType=”text/html; charset=UTF-8″

pageEncoding=”UTF-8″%

%@ page language=”java” contentType=”text/html; charset=UTF-8″

pageEncoding=”UTF-8″%

%

request.setCharacterEncoding(“UTF-8”);

%

◆charset=UTF-8的作用是指定JSP向客户端输出的编码方式为“UTF-8”;

◆pageEncoding=”UTF-8″,为了让JSP引擎能正确地解码含有中文字符的JSP页面,这在LINUX中很有效;

◆request.setCharacterEncoding(“UTF-8”);是对请求进行了中文编码。

有时,这样仍不能解决问题,还需要这样处理一下:

String msg = request.getParameter(“message”);

String str=new String(msg.getBytes(“ISO-8859-1″),”UTF-8”);

out.println(st);

如何解决java编译时编码问题造成的错误

Java源码文件这些文件可以是任意字符编码的,在Java的Class文件里存储的字符串是UTF-8编码的,所以如果在代码中有中文字符的话,就会导致乱码。当然,这只是众多原因中的一种,所以把编码设置统一是避免出现乱码的解决办法。

工具:

eclipse

方法如下:

点击window–Preferences

选择General–WorkSpace,选择Default(GBK)即可

附:也可以选择Other,从Other中选择程序需要的编码格式。

java后台怎么解决编码问题

不用实现和继承,自己封装就可以了,想要什么转换自己对应封装方法就可以了,这样自己用起来也方便点。再往上找了个例子,你看看希望能帮到你!public class ChangeCharset {

/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */

public static final String US_ASCII = “US-ASCII”;

/** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */

public static final String ISO_8859_1 = “ISO-8859-1”;

/** 8 位 UCS 转换格式 */

public static final String UTF_8 = “UTF-8”;

/** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */

public static final String UTF_16BE = “UTF-16BE”;

/** 16 位 UCS 转换格式,Little-endian(最高地址存放低位字节)字节顺序 */

public static final String UTF_16LE = “UTF-16LE”;

/** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */

public static final String UTF_16 = “UTF-16”;

/** 中文超大字符集 */

public static final String GBK = “GBK”;

/**

* 将字符编码转换成US-ASCII码

*/

public String toASCII(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, US_ASCII);

}

/**

* 将字符编码转换成ISO-8859-1码

*/

public String toISO_8859_1(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, ISO_8859_1);

}

/**

* 将字符编码转换成UTF-8码

*/

public String toUTF_8(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_8);

}

/**

* 将字符编码转换成UTF-16BE码

*/

public String toUTF_16BE(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_16BE);

}

/**

* 将字符编码转换成UTF-16LE码

*/

public String toUTF_16LE(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_16LE);

}

/**

* 将字符编码转换成UTF-16码

*/

public String toUTF_16(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, UTF_16);

}

/**

* 将字符编码转换成GBK码

*/

public String toGBK(String str) throws UnsupportedEncodingException {

return this.changeCharset(str, GBK);

}

/**

* 字符串编码转换的实现方法

*

* @param str

* 待转换编码的字符串

* @param newCharset

* 目标编码

* @return

* @throws UnsupportedEncodingException

*/

public String changeCharset(String str, String newCharset)

throws UnsupportedEncodingException {

if (str != null) {

// 用默认字符编码解码字符串。

byte[] bs = str.getBytes();

// 用新的字符编码生成字符串

return new String(bs, newCharset);

}

return null;

}

/**

* 字符串编码转换的实现方法

*

* @param str

* 待转换编码的字符串

* @param oldCharset

* 原编码

* @param newCharset

* 目标编码

* @return

* @throws UnsupportedEncodingException

*/

public String changeCharset(String str, String oldCharset, String newCharset)

throws UnsupportedEncodingException {

if (str != null) {

// 用旧的字符编码解码字符串。解码可能会出现异常。

byte[] bs = str.getBytes(oldCharset);

// 用新的字符编码生成字符串

return new String(bs, newCharset);

}

return null;

}

public static void main(String[] args) throws UnsupportedEncodingException {

ChangeCharset test = new ChangeCharset();

String str = “This is a 中文的 String!”;

System.out.println(“str: ” + str);

String gbk = test.toGBK(str);

System.out.println(“转换成GBK码: ” + gbk);

System.out.println();

String ascii = test.toASCII(str);

System.out.println(“转换成US-ASCII码: ” + ascii);

gbk = test.changeCharset(ascii, ChangeCharset.US_ASCII,

ChangeCharset.GBK);

System.out.println(“再把ASCII码的字符串转换成GBK码: ” + gbk);

System.out.println();

String iso88591 = test.toISO_8859_1(str);

System.out.println(“转换成ISO-8859-1码: ” + iso88591);

gbk = test.changeCharset(iso88591, ChangeCharset.ISO_8859_1,

ChangeCharset.GBK);

System.out.println(“再把ISO-8859-1码的字符串转换成GBK码: ” + gbk);

System.out.println();

String utf8 = test.toUTF_8(str);

System.out.println(“转换成UTF-8码: ” + utf8);

gbk = test.changeCharset(utf8, ChangeCharset.UTF_8, ChangeCharset.GBK);

System.out.println(“再把UTF-8码的字符串转换成GBK码: ” + gbk);

System.out.println();

String utf16be = test.toUTF_16BE(str);

System.out.println(“转换成UTF-16BE码:” + utf16be);

gbk = test.changeCharset(utf16be, ChangeCharset.UTF_16BE,

ChangeCharset.GBK);

System.out.println(“再把UTF-16BE码的字符串转换成GBK码: ” + gbk);

System.out.println();

String utf16le = test.toUTF_16LE(str);

System.out.println(“转换成UTF-16LE码:” + utf16le);

gbk = test.changeCharset(utf16le, ChangeCharset.UTF_16LE,

ChangeCharset.GBK);

System.out.println(“再把UTF-16LE码的字符串转换成GBK码: ” + gbk);

System.out.println();

String utf16 = test.toUTF_16(str);

System.out.println(“转换成UTF-16码:” + utf16);

gbk = test.changeCharset(utf16, ChangeCharset.UTF_16LE,

ChangeCharset.GBK);

System.out.println(“再把UTF-16码的字符串转换成GBK码: ” + gbk);

String s = new String(“中文”.getBytes(“UTF-8”), “UTF-8”);

System.out.println(s);

}

}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159818.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-20 00:16
下一篇 2024-11-20 00:16

相关推荐

  • 如何解决WPS保存提示会导致宏不可用的问题

    如果您使用过WPS,可能会碰到在保存的时候提示“文件中含有宏,保存将导致宏不可用”的问题。这个问题是因为WPS在默认情况下不允许保存带有宏的文件,为了解决这个问题,本篇文章将从多个…

    编程 2025-04-29
  • 如何解决dlib库安装失败

    如果您遇到了dlib库安装失败的问题,在此文章中,我们将从多个方面对这个问题进行详细的阐述,并给出解决方法。 一、检查环境安装情况 1、首先,您需要确认是否安装了C++编译器和Py…

    编程 2025-04-29
  • 如何解决web浏览器双击事件时差

    本文将从以下几个方面对web浏览器双击事件时差进行详细阐述,并提供解决方法。 一、双击事件延时设置 1、问题描述:在web浏览器中,双击事件默认会延时一定的时间才能触发该事件,这个…

    编程 2025-04-29
  • 如何解决vuejs应用在nginx非根目录下部署时访问404的问题

    当我们使用Vue.js开发应用时,我们会发现将应用部署在nginx的非根目录下时,访问该应用时会出现404错误。这是因为Vue在刷新页面或者直接访问非根目录的路由时,会认为服务器上…

    编程 2025-04-29
  • Python载入Cookie错误解决方法用法介绍

    本文将从多个方面详细阐述Python载入Cookie错误的解决方法,希望能对读者有所帮助。 一、Cookie错误常见原因 1、Cookie过期:当Cookie过期时,载入Cooki…

    编程 2025-04-29
  • 如何解决egalaxtouch设备未找到的问题

    egalaxtouch设备未找到问题通常出现在Windows或Linux操作系统上。如果你遇到了这个问题,不要慌张,下面我们从多个方面进行详细阐述解决方案。 一、检查硬件连接 首先…

    编程 2025-04-29
  • 如何解决Grid监控报错prvg-1205

    Grid监控是Oracle RAC的重要组件,它可以帮助监视RAC集群的运行状态和性能,对于集群管理非常关键。但是,如果在安装过程中遇到报错prvg-1205,将会导致安装失败,影…

    编程 2025-04-28
  • 如何解决当前包下package引入失败python的问题

    当前包下package引入失败python的问题是在Python编程过程中常见的错误之一。 它表示Python解释器无法在导入程序包时找到指定的Python模块。 正确地说,Pyt…

    编程 2025-04-28
  • 如何解决打包文件没有字体的问题

    如果你遇到了打包文件缺少字体的问题,那么不要慌张。本文将会从多个方面为你提供解决方法。 一、确认字体是否被正确打包 要想打包文件中包含字体,首先需要确认字体是否被正确打包。你可以使…

    编程 2025-04-28
  • Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901解析

    本文将对Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901进行详细解析,并提供相关代码示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    编程 2025-04-27

发表回复

登录后才能评论