java之对字符的编码处理

GBK编码中的无法映射的字符及其处理方法(Java) 本文介绍了GBK编码中的无法映射字符及在Java中处理它们的方法。GBK编码是一种针对汉字字符集的编码方式,它兼容了GB2312编码,并增加了更多的中文字符。本文将介绍这些无法映射的字符以及在Java中处理它们的方法。当我们在使用GBK编码时,如果遇到无法映射的字符,需要采取相应的处理方法。通过以上方法,我们可以处理GBK编码中的无法映射字符,确保程序在处理中文字符时不出现异常。以上是对于编码为GBK无法映射字符处理的相关方法,希望对您有所帮助。GBK编码中的无法映射的字符及其处理方法(Java) 阅读详情

本文转自http://kxjhlele.iteye.com/blog/333211,讲述了java中对字符的编码处理

    在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。

1. getBytes(charset)

    这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码,并以字节方式表示。注意字符串在java内存中总是按unicode编码存储的。比如"中文",正常情况下(即没有错误的时候)存储为"4e2d 6587",如果charset为"gbk",则被编码为"d6d0 cec4",然后返回字节"d6 d0 ce c4".如果charset为"utf8"则最后是"e4 b8 ad e6 96 87".如果是"iso8859-1",则由于无法编码,最后返回 "3f 3f"(两个问号)。

java   .class类的编码为:unicode;

windows 默认的编码为:中文:gb2312; 英文:iso8859;

  1. String str = "张三" ;

  2. byte[] jiema= str.getBytes("gb2312") ; //解码

  3. String bianma = new String(jiema,"UTF-8");//编码 如果上面的解码不对 可能出现问题

2. new String(charset)

    这是java字符串处理的另一个标准函数,和上一个函数的作用相反,将字节数组按照charset编码进行组合识别,最后转换为unicode存储。参考上述getBytes的例子,"gbk" 和"utf8"都可以得出正确的结果"4e2d 6587",但iso8859-1最后变成了"003f 003f"(两个问号)。

    因为utf8可以用来表示/编码所有字符,所以new String( str.getBytes( "utf8" ), "utf8" ) === str,即完全可逆。

3. setCharacterEncoding()

    该函数用来设置http请求或者相应的编码。

    对于request,是指提交内容的编码,指定后可以通过getParameter()则直接获得正确的字符串,如果不指定,则默认使用iso8859-1编码(因为iso8859-1有很多的字符不能表示,因此会成为乱码),需要进一步处理。参见下述"表单输入".值得注意的是在执行setCharacterEncoding()之前,不能执行任何getParameter()。java doc上说明:This method must be called prior to reading request parameters or reading input using getReader()。而且,该指定只对POST方法有效,对GET方法无效。分析原因,应该是在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析所有的提交内容,setCharacterEncoding()自然就无效(所以应该在提交的时候就使用utf-8进行编码,这样getParameter的时候再解码就ok了)。

    对于response,则是指定输出内容的编码,同时,该设置会传递给浏览器,告诉浏览器输出内容所采用的编码。

4. 处理过程

    下面分析两个有代表性的例子,说明java对编码有关问题的处理方法。

   4.1. 表单输入

    User input *(gbk:d6d0 cec4) browser *(gbk:d6d0 cec4) web server iso8859-1(00d6 00d0 00ce 00c4) class,需要在class中进行处理:getbytes("iso8859-1")为d6 d0 ce c4,new String("gbk")为d6d0 cec4,内存中以unicode编码则为4e2d 6587.

    l 用户输入的编码方式和页面指定的编码有关,也和用户的操作系统有关,所以是不确定的,上例以gbk为例。

    l 从browser到web server,可以在表单中指定提交内容时使用的字符集,否则会使用页面指定的编码。而如果在url中直接用?的方式输入参数(即get方法),则其编码往往是操作系统本身的编码,因为这时和页面无关。上述仍旧以gbk编码为例。

    l Web server接收到的是字节流,默认时(getParameter)会以iso8859-1编码处理之,结果是不正确的,所以需要进行处理。但如果预先设置了编码(通过request. setCharacterEncoding ()),则能够直接获取到正确的结果。

    l 在页面中指定编码是个好习惯,否则可能失去控制,无法指定正确的编码,通常指定为utf-8。

    4.2. 文件编译

    假设文件是gbk编码保存的,而编译有两种编码选择:gbk或者iso8859-1,前者是中文windows的默认编码,后者是linux的默认编码,当然也可以在编译时指定编码。

    Jsp *(gbk:d6d0 cec4) java file *(gbk:d6d0 cec4) compiler read uincode(gbk: 4e2d 6587; iso8859-1: 00d6 00d0 00ce 00c4) compiler write utf(gbk: e4b8ad e69687; iso8859-1: *) compiled file unicode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce 00c4) class.所以用gbk编码保存,而用iso8859-1编译的结果是不正确的。

    class unicode(4e2d 6587) system.out / jsp.out gbk(d6d0 cec4) os console / browser.

    l 文件可以以多种编码方式保存,中文windows下,默认为ansi/gbk.

    l 编译器读取文件时,需要得到文件的编码,如果未指定,则使用系统默认编码。一般class文件,是以系统默认编码保存的,所以编译不会出问题,但对于jsp文件,如果在中文windows下编辑保存,而部署在英文linux下运行/编译,则会出现问题。所以需要在jsp文件中用pageEncoding指定编码。

    l Java编译的时候会转换成统一的unicode编码处理,最后保存的时候再转换为utf编码。

    l 当系统输出字符的时候,会按指定编码输出,对于中文windows下,System.out将使用gbk编码,而对于response(浏览器),则使用jsp文件头指定的contentType,或者可以直接为response指定编码。同时,会告诉browser网页的编码。如果未指定,则会使用iso8859-1编码。对于中文,应该为browser指定输出字符串的编码。

    l browser显示网页的时候,首先使用response中指定的编码(jsp文件头指定的contentType最终也反映在response上),如果未指定,则会使用网页中meta项指定中的contentType.

5. 几处设置

    对于web应用程序,和编码有关的设置或者函数如下。

    5.1. jsp编译

    指定文件的存储编码,很明显,该设置应该置于文件的开头。例如:charset=utf-8。另外,对于一般class文件,可以在编译的时候指定编码。

    5.2. jsp输出

    指定文件输出到browser是使用的编码,该设置也应该置于文件的开头。例如:。该设置和response.setCharacterEncoding("GBK")等效。

    5.3. meta设置

    指定网页使用的编码,该设置对静态网页尤其有作用。因为静态网页无法采用jsp的设置,而且也无法执行response.setCharacterEncoding()。例如:

    如果同时采用了jsp输出和meta设置两种编码指定方式,则jsp指定的优先。因为jsp指定的直接体现在response中。

    需要注意的是,apache有一个设置可以给无编码指定的网页指定编码,该指定等同于jsp的编码指定方式,所以会覆盖静态网页中的meta指定。所以有人建议关闭该设置。

   5.4. form设置

    当浏览器提交表单的时候,可以指定相应的编码。例如:URLEncoder.encode(key, "utf-8"))。一般不必不使用该设置,浏览器会直接使用网页的编码。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

首先介绍两种字符集 gb2312 和 gbk 
   。gb2312 简体中文编码
   。gbk    中文字符编码 包括繁体中文

1. 指定jsp文件里内容的的编码方式

   <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

2. 指定html文件里内容的编码方式
   <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
3. 当响应用户的请求时,输出到用户浏览器上的编码方式

   <%@ page contentType="text/html"; charset="gb2312"%>
   相当于生成的代码 response.setContentType("text/html; charset=gb2312");

4. 把用户传递过来的参数作为指定的编码
request.setCharacterEncoding("gb2312");

5. 对比
   request.setCharacterEncoding("gb2312");               //设置输入编码格式
   response.setContentType("text/html; charset=gb2312"); //设置输出编码格式

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

参考:

编码表:http://www.chenjiliang.com/Article/View.aspx?ArticleID=248&TypeID=20

java编码类型获取: http://java.chinaitlab.com/base/742939.html

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位 本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到, 阅读详情

相关推荐

从报错到成功:手把手教你避坑clusterProfiler安装全流程

本文详细解析了clusterProfiler安装过程中的常见报错及解决方案,从CRAN安装误区到Bioconductor拼写错误,再到依赖包安装失败等问题,提供了五步正确安装法。特别适合生物信息分析新手快速掌握R包安装技巧,避免踩坑。

weixin_30859423的博客 379

【Java 基础】28 字符编码

字符编码是 Java 编程中不可忽视的重要概念。了解不同的字符集和编码方式,以及如何在 Java 中进行字符编码和解码,对于处理文本数据至关重要。通过正确地选择字符集和编码方式,可以确保应用在处理多语言和国际化文本时能够稳健地运行。在实际开发中,始终保持对字符编码的关注,并采用良好的编码实践,将有助于提高应用的可维护性和稳定性。

好久不见的流星 1781

FANUC机器人RSR与PNS功能深度解析及实战应用指南

本文深度解析了FANUC机器人RSR(远程程序启动)与PNS(程序号选择)两大核心功能。文章详细阐述了RSR的队列执行机制与PNS的二进制编码原理,提供了从硬件连接到参数配置的完整实战指南,并分享了混合使用策略与常见故障排除方法,旨在帮助工程师实现高效、稳定的生产线自动化程序调度。

neovim7hacker的博客 308

java字符串编码和解码问题

1、在java开发中经常会遇到中文文字编码问题,该怎么解决?首先我们先了解一下,什么是编码?什么是解码?//举个例子: (1)编码: String -> byte[ ]; 常用方法: str.getBytes(charsetName) (2)解码: byte[ ] -> String; 常用方法: new String(byte[ ],charsetName); 2、为什么会出现乱码? 1、正确演示 正常显示的字符串无乱码解码后的字符串对象可以用任意方式编码。但解码要正常显示,必须用对应的编码方式解码。

sxp知识共享 4438

减小伺服电机共振的方法(以松下伺服为例)

嘿 ! 我是【小黄】 , 我们又见面啦 !!! 毕竟技术只有大家交流才会进步嘛 ! 这博客是对自己学习的一点点记录和总结 ,如果您对自动控制感兴趣的话 ,可以关注一下我的动态 , 我们一起学习呀 ! 我们都还年轻 ,我们还有无限可能 。 YES ! 减小伺服电机共振的方法(以松下伺服为例)1. 准备工作:1.1.1 如何推定共振点:1.1.2 测定实操:1.1.3 总结:2. 下期预告: 在我们调试完伺服参数以后机器人运动到某个特定位置会产生振动或异响,我们要做的就是消除这个异响保..

在下小黄的博客 1万+

线上专利申请(超详细)| 签名确认

在【法人登录】页面点击【证书登录】按钮,弹出证书登录提示框,点击【确 认】按钮,进入到输入证书密码页面,点击【取消】按钮,取消本次操作。企业在提交申请时,需要增加签名,如使用企业账户点击提交,会弹出“法人、代理机构不能签名,请使用经办人签名”,这个时候就需要换个账号了。在需要签名时,将专利官网的登录方式点击法人登录,选择扫码登录,使用移动端经办人账户的扫一扫功能扫描登录。登录完成后,再点击签名,使用移动端扫一扫功能,扫描签名,输入证书号,确认签名,并提交。最后,祝大家的申请都成功!

weixin_62112323的博客 9110

字符串编码全攻略(含Java代码实战),从此告别“锟斤拷”

我们都知道,对于计算机而言,它只认识0和1,所有的信息最终存储下来都是二进制数。而字符编码(Character Encoding)就是一种规则,它能够将字符(如字母、数字、标点符号等)映射到计算机中的二进制数据。 将字符映射到二进制数据的过程叫做编码,那么将二进制数据映射到字符就叫做解码。 为了能表示字符,我们就需要一个能描述某个字符范围的编码规则,这就是字符集的概念。

weixin_70757494的博客 4562

408计算机复试专业课问答汇总

408计算机复试专业课问答汇总

weixin_45930223的博客 3698

Java字符编码

目录 字符编码介绍 字符编码(1) 字符编码(2) 字符编码(3) 字符编码(4) Java的字符编码与相关类: Java字符编码 Java字符相关类的代码实践 总结 字符编码介绍 字符编码(1) - 字符:0,a,我,1,の,... - 计算机只用0和1,1bit(0或1) - ASCII码(American Standard Code for Information Interchange) 美国信息交换标准代码,奠定计算机编码基础 用一个字节(1 Byte.

m0_53823846的博客 2917

等时替代模型( Isotemporal Substitution Model)

文献阅读:Associations of sedentary time and physical activity with adverse health conditions: Outcome-wide analyses using isotemporal substitution model(该论文于2022年4月28日发表在柳叶刀子刊 EClinicalMedicine 上)

姚巨龙的博客 1万+

基于 YOLOv26 的 PCB 板缺陷检测:工业级视觉实战

本文提出了一种基于YOLOv26的PCB板缺陷检测系统,通过深度学习技术实现对PCB板缺陷的自动化检测。系统能够识别短路、开路、焊点不良等8种常见缺陷,具有高精度、多类别分类和实时推理等优势。文章详细介绍了系统架构,包括数据采集、预处理、YOLOv26模型检测和后处理模块。在代码实现部分,给出了环境配置、数据预处理与增强的具体方法,使用Albumentations库进行图像增强处理。该系统为电子制造业提供了高效、准确的PCB质量检测解决方案,显著提升了检测效率和准确性。

一键难忘的博客 337

java字符编码总结

本文介绍了计算机字符集和字符编码的历史演进。以及java中使用utf-16作为编码的介绍

赶路人儿 7277

企业合规审查系统开发实战:基于知识图谱与深度学习的智能引擎构建(附完整Python代码)

动态合规监测:实时追踪法规变化并更新知识库智能合约审计:区块链智能合约的自动合规检查跨域知识融合:整合财务、法律、业务多维度数据可解释性增强:基于Attention机制生成合规审查依据。

理论都是虚的,代码才是王道。 456

java 字符串指定编码输出_java对字符的编码处理

在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。1. getBytes(charset)这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码,并以字节方式表示。注意字符串在java内存中总是按unicode编码存储的。比如"中文",正常情况下(即没有错误的时候)存储为"4e2d 6587",如果char...

weixin_42355399的博客 5801

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java对字符的编码处理

本文转自http://kxjhlele.iteye.com/blog/333211,讲述了java中对字符的编码处理     在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。 1. getBytes(charset)     这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码,并以字

JavaChaoCo的博客 686

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java 16进制转字符串 乱码_java中字符串编码的转换以及乱码后的处理总结

java中编码的转换。常见的编码也就ISO8859-1,GBK,GB2312,UTF-8java里有String这个类存储并处理字符串,同样String里有个方法叫getBytes(),这个方法起着编码转换的作用。API里这样解释这个方法:Encodes this String into a sequence of bytes using the named charset, storing th...

weixin_35455175的博客 1912

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java字符编码处理

本文转自http://kxjhlele.iteye.com/blog/333211,讲述了java中对字符的编码处理     在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。 1. getBytes(charset)     这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码,并以字

hbcztutu的博客 388

Java 中的字符编码,以及和编码相关的字符串处理

字符串处理经常会遇到编码的问题(汉字、日语、韩语等)。近日遇到一个问题:在JEditorPane中,已知字节数据(UTF-8编码)偏移量,需要定位光标到相应的字符。结果老是有偏差。于是对字符串进行了分析,记录如下: 字符串存储,以及编码转换分析 测试字符串: String ls="中文测试abcd"; 逐个打印每个字符的编码值: for (int i =0 ;i &lt...

diganchu3301的博客 140

[Java]拦截器处理字符编码统一

package com.iweb.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import java.io.IOException; //所有的字符编码都需要统一,所以这里用全部 @WebFilter(value = "/*",initParams = { @WebInitParam(name

xx_ii 854

Java处理不同的字符编码流

在实际开发中,可能会处理一些文本信息,我们可能使用 BufferedReader bfr = new BufferedReader(new InputStreamReader(bis,encoding)); 这样的方式来处理输入流,然后就可以一行一行的处理信息了。 但是,这里的encoding一般都不会确定,有的是GBK格式,有的是UTF-8格式,可能还有其他格式的文件。 ...

aoqizhan1605的博客 217
上一篇: javaweb之解决HttpServletResponse输出的中文乱码问题
下一篇: 如何读一个JavaWeb项目源代码
猪小皮
博客等级 码龄14年 41粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值