`
whp0731
  • 浏览: 170354 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java编码处理

    博客分类:
  • J2SE
阅读更多

java编码处理:(java在内存中使用的是uniocode编码)
一、编码基本知识:
1、iso8859-1   单字节编码  范围0-255 优点:和计算机最基础的表示单位一致
2、GBK/GB2312  双字节编码                  和iso8859-1兼容
3、unicode     双字节(也有四字节)        和iso8859-1不兼容,也不兼容任何编码
4、UTF         变长,一般英文字母用一个字节表示,汉字用三个字节表示   和iso8859-1兼容 最通用的编码


二、java处理
1、getBytes(charset)举例
程序:debug以下程序,可以发现注意字符串在java内存中总是按unicode编码存储的。比如"中文",正常情况下(即没有错误的时候)存储为"4e2d 6587",如果charset为"gbk",

则被编码为"d6d0 cec4",然后返回字节"d6 d0 ce c4"。如果charset为"utf8"则最后是"e4 b8 ad e6 96 87"。如果是"iso8859-1",则由于无法编码,最后返回 "3f 3f"(注:

"3f 3f"是两个问号)。
public class JavaCharactorTest {
 public static void main(String[] args) throws UnsupportedEncodingException {
  String str = "中国";
  byte[] b = str.getBytes("gbk");
 }
}


2、new String(charset)
这个举例可以参考我附的问答。

3、其他
可参考文章
http://www.java-cn.com/club/?action-viewnews-itemid-2012
写的很全

 

 

附:

问:
new String(str.getBytes("ISO-8859-1"),"GBK")
如题,假设str=request.getParameter("name"); name传到servlet一个中文名字

我看到很多人在碰到乱码问题时,都提示要使用new String(str.getBytes("ISO-8859-1"),"GBK");
原因是jsp页面编码设为GBK了
但我觉得就不对了:
首先,假设在jsp页面输入了一个name 小二,小二的gbk编码假设为oxaabb;现在name传到servlet,
在穿的过程中,如果用iso-8859-1传,那么该编码本身就不支持中文,将直接用两个?代替,
那么我再用new String(str.getBytes("ISO-8859-1"),"GBK")转又有什么用,还是两个?啊

请高手解析一把

答:

除了UTF-16,其它字符集定义时都重复。

比如汉字“我”,假设它的值是22530(只是假设,具体多少我没查)
而日文的“マ”的值也可能是22530(也是假设)或韩文的“찾”

在网络上传输是不能以高字节传输,因为网络底层最后只认无符号char,相当于java中的byte,所以
22530这个int要转换为字节数组,

byte[0] = (22530 >> 8)&0xFF;
byte[1] = 22530 &0xFF;
具体多少我没算,假设是byte[125,231]

这样的字节传到服务端到是表示汉字“我”还是日文的“マ”还是其它狗屁?
一般通讯协议中会告诉对字符集,比如HTTP在请求时告诉服务端:
ContentType="xxxxxxxxxx";charset="GKB";
这时服务端就知道现在接收到的[125,231]是GKB的“我”而不是其它文字。

上面是标准的通信过程。但如果有些水平很差的程序员在提交请求时没有通知服务端字符集,那服务端就没办法了。
只好按最常用的字符集来猜一个默认的。

这还不错,最要命的是写服务器的程序员水平和见识很差时,就要命了。就象写老版本的TOMCAT的程序员,他自己生在西方,以为全世界所有人都用的是26个字母加一些符号,所

以他不管客户端提交什么都按ISO-8859-1来算,结果可想而知。

没办法,谁让我们用GBK的人不会写tomcat呢,只好先把让那个差劲的程序员错误生成的String用ISO-8859-1还原成
[125,231],再重新用GKB生成String.

分享到:
评论

相关推荐

    Java编码处理怎样去解决

    Java编码处理德国 果腹夺回东方红 东方红复活

    java编码规范,非常详细

    java编码规范,非常详细 每个switch-case语句都有最后一个default以确保处理了全集。switch中,每一条case分支必须使用break语句结束

    java编码格式转换

    关于java字符编码格式之间的转换, 及常见编码转换错误处理。 thank me

    Java编码规范总结

    原因:switch用来处理多分支的情况。 3.Switch语句应该包含一个default。 4.多线程错误 - 错误的延迟初始化和更新静态属性。 5.错误用法 - 集合转换为数组元素时发生的类型转换错误。 修复建议:使用c.toArray...

    数据处理方法-算术编码(CRC-Java编码实现)

    它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。 以下步骤将描述 6 字节红外控制码生成过程: 1.从二维码的中依次顺序提取前 2 个英文字母、最后 2 个...

    java 文件编码转换

    用于处理文件编码的问题 提供一个jar包和 一个java文件

    java检查邮政编码的class

    java用于检查某些国家邮政编码的class

    java使用URLDecoder和URLEncoder对中文字符进行编码和解码

    主要介绍了java 使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    JAVA 编码规范

    1命名规则 3 1.1 共性规则 3 1.2 应用程序命名规则 4 1.3 Java命名规则 4 1.4 子系统命名规范 5 1.5 层次命名规范 6 1.6 JNDI命名规则 6 1.7 主机名命名规则 7 ...5异常处理规范 16 6附录1 17 7附录2: Java编程参考 17

    java socket处理硬件传过来的16进制数据的工具类

    java socket处理硬件传过来的16进制数据的工具类,包含大小端转换、byte[]数组转换为16进制的字符串、byte[]转ByteBuffer、16进制字符串转换为byte数组等

    java编码的网上购物系统

    在Struts框架中,JSP用于前端展现,Servlet 用于控制,Action 用于处理前端页面JSP发来的请求,请求参数通过ActionForm进行传递,Action 在获得请求后通过调度业务系统提供的Spring service bean做处理,最后将处理结果...

    Java高级程序设计实战教程第一章-Java编码规范.pptx

    二、规范的代码可以减少bug处理 三、规范的代码可以降低维护成本 四、规范的代码有助于代码审查 五、养成代码规范的习惯,有助于程序员自身的成长 Java高级程序设计实战教程第一章-Java编码规范全文共13页,当前为第...

    Java 编码规范.docx

    Java 编码规范,命名风格、 常量定义、 代码格式、 OOP规约、 集合处理 、 并发处理、 控制语句、 注释规约

    Java的编码机制,处理中文乱码必读材料

    主要简述编码机制。可以用来解决java和存储数据库时的中文乱码。

    如何用java实现不同编码方式字符串的转换(包含异常处理、重复不终止输入、缓冲区bufferedreader的使用)

    如何用java实现不同编码方式字符串的转换(包含异常处理、重复不终止输入、缓冲区bufferedreader的使用)

    java处理常规加密解密

    java处理常规加密解密,设计到类库的调用,编码的格式等等,大家可以看看,然后自己写写!! java处理常规加密解密,设计到类库的调用,编码的格式等等,大家可以看看,然后自己写写!! java处理常规加密解密,设计到...

    Java实现HEIC格式图片转换

    内有安装操作步骤及编码内容。亲测有效。 场景运用:ios操作系统在前端图片格式上传中。已普遍采用HEIC格式图片。前端图片插件不支持HEIC格式展示,需要在后端对HEIC格式图片进行转换为常用图片格式PNG,JPEG处理。...

    使用 Java 对 Linux 下文件编码格式进行批量转换源代码

    测试使用说明: 1。将 字符集编码格式为 GB2312 的文件 test0.java,test1.java,test2.java 放在 /home/defonds/tmp/test 目录下(test...只需适当配置一下,可以批量处理各种文件格式的文件,如 *.txt,*.java 等等。

    基于java的货物进销管理系统

    编写一个Inventory.java完成以下功能(没有学过Java文件处理之前,各位同学可以使用硬编码将数据放进两个Vector变量里。等学过Java文件处理之后,再补充数据文件读取部分): 1.程序首先打开并读取Inventory.txt中...

    研发中心-java编码规范.docx

    (五) 集合处理 9 (六) 并发处理 12 (七) 控制语句 14 (八) 注释规约 16 (九) 其它 17 二、异常日志 18 (一) 异常处理 18 (二) 日志规约 19 三、单元测试 21 四、安全规约 23 五、...

Global site tag (gtag.js) - Google Analytics