二、基本概念

2.1 JAVA中字符的表达

JAVA中有char、byte、String这几个概念。

char 指的是一个UNICODE字符,为16位的整数。java抓取网页保存的乱码问题解决

byte 是字节,字符串在网络传输或存储前需要转换为byte数组。在从网络接收或从存储设备读取后需要将byte数组转换成String。

String是字符串,可以看成是由char组成的数组。

String 和 char 为内存形式,byte是网络传输或存储的序列化形式。

举例: 英 String ying = “英”; char ying = ying.charAt(0);         //返回第0位的字符 String yingHex = Integer.toHexString(ying);      //字符和整数同是16位 82 F1  byte yingGBBytes = ying.getBytes(“GBK”);      //转换成字节 GB编码的字节数值 D3 A2

2.2 编码方式的简介 String序列化成byte数组或反序列化时需要选择正确的编码方式。如果编码方式不正确,就会得到一些0x3F的值。常用的字符编码方式有ISO8859_1、GB2312、GBK、UTF-8/UTF-16/UTF-32。 ISO8859_1用来编码拉丁文,它由单字节(0-255)组成。 GB2312、GBK用来编码简体中文,它有单字节和双字节混合组成。最高位为1的字节和下一个字节构成一个汉字,最高位为0的字节是ASCII码。 UTF-8/UTF-16/UTF-32是国际标准UNICODE的编码方式。 用得最多的是UTF-8,主要是因为它在对拉丁文编码时节约空间。

UNICODE值 UTF-8编码 U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx  U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx  U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

三、J2SE中相关的函数 String str =”英”; //取得GB2312编码的字节 byte[] bytesGB2312 = str.getBytes(“GB2312”);

//取得平台缺省编码的字节(solaris为ISO8859_1,windows为GB2312) byte[] bytesDefault = str.getBytes();

//用指定的编码将字节转换成字符串 String newStrGB = new String(bytesGB2312, “GB2312”);

//用平台缺省的编码将字节转换成字符串(solaris为ISO8859_1,windows为GB2312) String newStrDefault = new String(bytesDefault);

//用指定的编码从字节流里面读取字符 InputStream in = xxx; InputStreamReader reader = InputStreamReader( in, “GB2312”); char aChar = reader.read();

四、JSP、数据库的编码 4.1 JSP中的编码 (1) 静态声明: CHARSET有两个作用: JSP文件的编码方式:在读取JSP文件、生成JAVA类时,源JSP文件中汉字的编码 JSP输出流的编码方式:在执行JSP时,往response流里面写入数据的编码方式 (2) 动态改变:在往response流里面写数据前可以调用response.setContentType(),设定正确的编码类型。 (3) 在TOMCAT中,由Request.getParameter() 得到的参数,编码方式都是ISO8859_1。所以如果在浏览器输入框内输入一个汉字“英”,在服务器端就得到一个ISO8859_1编码的 (0x00,0xD3,0x00,0xA2)。所以通常在接收参数时转码: String wrongStr = response.getParameter(“name”); String correctStr = new String(wrongStr.getBytes(“ISO8859_1”),”GB2312”); 在最新的SERVLET规范里面,也可以在获取参数之前执行如下代码: request.setCharacterEncoding(“GB2312”);

4.2 数据库的编码 (1) 数据库使用UTF-16 如果String中是UNICODE字符,写入读出时不需要转码 (2) 数据库使用ISO8859_1 如果String中是UNICODE字符,写入读出时需要转码 写入:String newStr = new String(oldStr.getByte(“GB2312”), “ISO8859_1”); 读出:String newStr = new String(oldStr.getByte(“ISO8859_1”),”GB2312”);

五、源文件的编码 5.1 资源文件 资源文件的编码方式和编辑平台相关。在WINDOWS平台下编写的资源文件,以GB2312方式编码。在编译时需要转码,以确保在各个平台上的正确性: native2ascii ?encoding GB2312 source.properties 这样从资源文件中读出的就是正确的UNICODE字符串。 5.2 源文件 源文件的编码方式和编辑平台相关。在WINDOWS平台下开发的源文件,以GB2312方式编码。在编译的时候,需要指定源文件的编码方式: javac ?encoding GB2312 JAVA编译后生成的字节文件的编码为UTF-8。

①最新版TOMCAT4.1.18支持request.setCharacterEncoding(String enc) ②资源文件转码成company.name=u82f1u65afu514b ③如果数据库使用utf-16则不需要这部分转码 ④页面上应有 转码?: String s = new String (request.getParameter(“name”).getBytes(“ISO8859_1”),”GB2312”); 转码?: String s = new String(name.getBytes(“GB2312”),”ISO8859_1”); 转码?: String s = new String(name.getBytes(“ISO8859_1”),” GB2312”);

因为url默认编码是容器的编码,tomcat默认是iso-8859-1.所以,request.gerParameter()获得的值必须转码,除非设置tomcat的默认url编码。

其实tomcat的默认url编码是可以设置的,具体怎么设置这里就不说了

如果想正确显示和传递中文,就必须转换成GBK字符,或者GB2312 而一个字符在网页间传递要经过编/解码的问题

tomcat获取从网络传送的字符username.getBytes("ISO8859_1") 再将获取的字符编码为"GBK"字符串,转换后把值赋回给username

username=new String(username.getBytes("ISO8859_1"),"GBK");

java 德文转码_web开发中的JAVA字符转码相关推荐

  1. java web水晶报表_WEB开发中水晶报表的使用心得

    [需求] 最近在项目开发过程中,客户要求用Crystal Reports生成pdf格式的报表,并实现自动打印功能. [实施索引] 1.创建水晶报表: 2.Java中利用报表组件包将报表结果生成pdf: ...

  2. 微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能

    微信公众平台开发中使用Java如何实现一个消息回复功能 发布时间:2020-11-17 16:11:11 来源:亿速云 阅读:82 作者:Leah 本篇文章给大家分享的是有关微信公众平台开发中使用Ja ...

  3. java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息

    微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...

  4. 支付宝芝麻信用免押金接口源码demo开发php和java流程

    芝麻信用免押金接口源码demo开发php和java流程,如何开发支付宝免押金接口功能 1 小程序选择商品 2 小程序请求创建订单 见小程序官方示例demo源码目录page\API\request ht ...

  5. J2EE Java黑客大曝光:开发安全的Java应用程序

    J2EE Java黑客大曝光:开发安全的Java应用程序 本书首先从Java及J2EE体系结构和基本安全机制入手,阐述Java认证和授权服务.Java密码系统扩展和Java安全套接字扩展等安全包,书中 ...

  6. 仿京细菜谱微信小程序源码 云开发菜谱微信小程序源码

    京细菜谱是一个美食分享网站,提供优质的家常菜谱大全,仿京细菜谱小程序源码为喜欢美食的朋友提供了很多的美食烹饪教程 让您轻松学会做美食.对不同食材和地域的饮食做了不同的分类和详细的做菜方法 分类十分详细 ...

  7. java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

    org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别. ...

  8. web开发中的JAVA字符转码

    2019独角兽企业重金招聘Python工程师标准>>> 二.基本概念 2.1 JAVA中字符的表达 JAVA中有char.byte.String这几个概念. char 指的是一个UN ...

  9. idea java 快捷键_图示Javahtml5开发中IDEA的一些常用默认快捷键

    IDEA全称为IntelliJ IDEA,主要用于以Java语言开发为基础的集成环境,也可以用于诸如html5之类与Java Web系列相关的语言或框架开发:IntelliJ IDEA在编写代码时有一 ...

最新文章

  1. jenkins job构建后汇总结果到同一个文本文档中去
  2. go预防CSRF攻击
  3. Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
  4. ES6 Map对象的使用
  5. 你的目的是什么是谁指使你_电视剧《谁说我结不了婚》第25-27集剧情:魏书帮程璐搞定投资人...
  6. NYOJ 202 红黑树 数组模拟中序遍历
  7. termux 开启 sshd
  8. 【Aladdin Unity3D Shader编程】之三 光照模型(二)
  9. 关于GDAL180中文路径不能打开的问题分析与解决
  10. 在苹果Mac中开启通用控制的方法
  11. wget整站抓取、网站抓取功能
  12. python foo函数_python——函数
  13. 各个版本的cmake下载
  14. android微信下拉出现小程序,微信下拉出现小程序怎么关闭 微信下拉小程序去掉方法...
  15. 软件内部的定时炸弹:0-Day Log4Shell只是冰山一角
  16. 悟空在哪里?奶妈在哪里?
  17. 移动硬盘某个分区打不开,显示“文件或目录损坏且无法读取”的解决方法
  18. angualr8观察者模式_理解观察者模式——用Angular的httpClient来解释观察者
  19. Google提出的以用户为中心的度量体系“HEART框架
  20. 计算机教师资格教案,小学信息技术教师资格证面试教案:操作系统新相识

热门文章

  1. java版通过轨道6根数实现计算出经纬度坐标
  2. 将excel中的数据导入数据库
  3. 非全局安装npm,在项目目录下执行命令
  4. linux的双系统修复工具下载,Mbrfix官方下载_Mbrfix.exe双系统MBR修复工具下载 - 系统之家...
  5. 初识python psutil
  6. SqlServer——数据库恢复模式(Recovery model)及备份策略
  7. 无锡设计培训——平面设计师都学什么
  8. js方式实现下拉列表框
  9. python-生成数据
  10. 计算机硬件相关的论文,计算机硬件论文范文