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;

[java]  view plain copy
  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

南方电网专业面试题(电气类-继电保护)(目录) 南方电网专业面试题(电气类-继电保护)(目录) 这些面试题围绕继电保护的基本概念、工作原理、分类、性能要求,以及变压器、断路器、母线保护、自动重合闸等电力系统关键设备的保护机制和操作原则展开,旨在评估应聘者对电力系统保护和控制策略的深入理解和实际应用能力。 阅读详情

相关推荐

集成电路模拟版图入门-版图基础学习笔记(四)

第三部分:版图的准备 2. 设计规则 3) Design Rule 2. 设计规则 4) 规则定义 4.1 NW(N WELL) 2. 设计规则 4) 规则定义 4.1 NW(N WELL) 2. 设计规则 4) 规则定义 4.2 PO(Poly) 2. 设计规则 4) 规则定义 4.3 M1(Metal1) 2. 设计规则 4) 规则定义 4.4 VIA 3. DRC文件 3.1 DRC:Design Rule Check,设计规则检查。 3.2 DRC程序了解有关

weixin_52955333的博客 6733

Java中如何将中文转换为英文String

在JAVA 编程中我们经常免不了需要对中文排序,而往往我们排序的依据就是中文的首字母,当然无论依据什么排序,我们都需要将中文转换成为String

philipseo88的博客 3843

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4961

【Java 基础】28 字符编码

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

好久不见的流星 1781

51单片机矩阵键盘——LCD1602显示

矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

YLG_lin的博客 9853

PCB压合原理与工艺全流程深度解析

PCB压合是多层印制电路板制造中的核心工序,其本质并非简单物理叠加,而是高分子树脂流动、玻璃布应力释放、铜箔热膨胀及界面能调控的协同过程。理解压合原理,需掌握温度-压力-时间三维曲线动态关系;优化工艺流程,须兼顾叠板精度、热压参数匹配与冷却策略;关键影响因素如半固化片(PP)选型、铜箔表面处理、设备温场均匀性、结构对称性、环境湿度及操作手法,共同决定层间结合力、翘曲度与孔壁质量。本文围绕PCB压合原理、工艺流程、关键影响因素三大维度展开,融合IPC标准、实测数据与产线案例,为工艺工程师、NPI人员及设备维护

weixin_29191081的博客 256

java 中文英文编码互转

字符串相关学习资料:https://edu.51cto.com/video/3832.htmlhttps://edu.51cto.com/video/4055.htmlJava 中文英文编码互转教程 作为一名刚入行的开发者,你可能会遇到需要在Java中进行中文和英文编码互转的情况。本文将指导你如何实现这一功能。 编码互...

weixin_41506053的博客 259

FPGA SPI驱动ADC避坑指南:以ADC128S022为例,详解时序设计与代码调试

本文以ADC128S022为例,详细解析FPGA通过SPI驱动ADC的时序设计与代码调试中的常见问题。从时钟分频计算、SPI模式选择到状态机实现,提供避坑指南和实战技巧,帮助工程师解决数据采集系统中的时序匹配难题。特别针对FPGA与ADC通信中的微妙差异,给出精确的Verilog代码示例和ModelSim仿真验证方法。

weixin_42522374的博客 458

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

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

weixin_70757494的博客 4562

Unity开发抖音小游戏存储的几种方法分析

前段时间写小游戏为了省事一直就没有研究抖音小游戏的存储方案,一直使用的是unity中的PlayerPrefs去做的存储,但是后来发现官方会一直提醒让使用抖音sdk中的新文件存储系统,从而降低内存占用。

类人_猿的博客 2533

【人工智能】AI 智能体驾驭工程(Harness Engineering)全解析

OpenAI将Harness定义为让Agent能完成有用工作的系统工程,Harness Engineering则是持续设计、实现、迭代这套系统的方法论;Anthropic将其概括为「让模型真正成为可靠Agent的基础设施」;Martin Fowler/Thoughtworks则将其定义为「控制Agent各层循环的规格、质量检查与工作流指导体系」。强大的AI模型是一匹爆发力极强的烈马;Prompt Engineering是「对马喊话的技巧」,Context Engineering是「给马看的地图」;

奶爸的编程之路,也就一周冷个三天 5243

JAVA字符转码

String.getBytes(String decode) new String(byte[], decode)

mudh118的博客 3988

STM32 BOOTLOADER配置以及APP跳转实现(裸机)

Bootloader是硬件启动的引导程序,是运行操作系统的前提。在操作系统内核或用户应用程序运行之前运行的一段小代码。对硬件进行相应的初始化和设定,最终为操作系统准备好环境。APP就是我们的应用程序,经过硬件引导程序之后跳转到系统程序运行。

吻等离子的博客 3355

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

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

weixin_42355399的博客 5801

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java之对字符的编码处理

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

猪小皮的博客 348

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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
上一篇: java连接Mysql时注意的问题
下一篇: SQL Server 存储过程
JavaChaoCo
博客等级 码龄11年 67粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值