`
whp0731
  • 浏览: 174792 次
  • 性别: 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编码时,需要遵循一定的最佳实践,确保代码的质量、可读性和可...

    Java编码规范.docx

    在集合处理中,Java 编码规范规定了对集合的基本操作,如添加、删除、遍历等。这些操作应该遵守一定的规则,以避免代码的混乱和难以维护。 在并发处理中,Java 编码规范规定了对多线程的基本规则,如线程安全、锁...

    华为JAVA编码规范.pdf

    华为JAVA编码规范.pdf 华为JAVA编码规范.pdf是华为公司编写的JAVA编程语言编码规范,旨在提供一个统一的编程风格和代码组织方式,以提高代码的可读性、维护性和可重用性。该规范涵盖了编程语言的基本结构、命名规则...

    java编码总结1

    5. 工具应用:了解并使用Java标准库以及第三方库提供的功能,提高编码处理的效率和准确性。 6. 源码规范:强调在编写Java源码时遵循编码规范的重要性,包括正确设定文件编码,使用合适的字符串拼接方法,以及避免因...

    腾讯java编码规范

    腾讯 Java 编码规范 腾讯 Java 编码规范是腾讯集团管理标准的一部分,旨在确保公司项目代码的易维护性和编码安全性。该规范涵盖了 Java 编码风格、文件组织、代码风格、注释、命名、声明、异常、习惯等方面。 一、...

    java编码主要用于java编码

    Java编码是程序开发的核心环节,主要涉及Java语言的语法、编程规范、最佳实践以及相关工具的使用。在Java编程中,我们遵循一定的规则和标准,以确保代码的可读性、可维护性和高效性。以下是对Java编码相关知识点的...

    java编码规范考试题答案.doc

    本文档涵盖了Java编码规范的各种方面,包括集合类、线程、对称密码算法、异常处理、命名规范、随机数生成、压缩文件解压、安全编程规范、操作系统登录用户名获取、Java新循环写法、方法参数、字符串比较、加密和数字...

    tlv的java编码和解码

    总之,Java中的TLV编码和解码涉及到数据结构的表示和转换,熟悉这种编码方式对于理解和处理通信协议、序列化数据等方面都有很大帮助。结合`ber-tlv`资源,开发者可以快速地在Java项目中实现自己的TLV处理功能。

    Java文件编码转换源码

    在Java编程语言中,文件编码转换是一个常见的任务,特别是在处理多国语言或者处理不同系统间的文件传输时。本文将深入探讨如何使用Java实现文件编码的转换,主要关注GB2312、UTF-8这两种常见编码格式之间的转换。 ...

    js解码 、java编码

    本文将深入探讨“js解码”和“java编码”这两个主题,并结合标签“源码”和“工具”,讨论如何在实际项目中应用它们。 首先,我们来看JavaScript中的解码。JavaScript是一种在客户端和服务器端都能运行的脚本语言,...

    Java 编码标准(PDF)

    Java编码标准是软件开发中的一项重要规范,它旨在提高代码质量、可读性以及团队间的协作效率。这份PDF文档很可能是Oracle公司或者一些知名的Java社区制定的编程规范,旨在为Java开发者提供一套统一的编码指南。以下...

    游程编码 JAVA 代码

    游程编码(Run Length Encoding, RLE)是一种简单的无损数据压缩算法,主要应用于处理具有大量重复连续元素的数据。在二值图像中,它尤其有效,因为通常图像中会有大面积的相同颜色区域。游程编码的基本思想是将连续...

    JAVA编码规范试题

    JAVA 编码规范试题 JAVA 编码规范试题是一套涵盖了 JAVA 编程规范的试题,旨在帮助开发者掌握 JAVA 编程的基本规范和best practice。该试题涵盖了 JAVA 编程规范的多个方面,包括变量命名、代码格式、异常处理、...

    Java 编码规范 chm

    1. **命名约定**:Java编码规范对变量、方法、类和包的命名有明确的要求。例如,类名应采用驼峰式命名法,每个单词首字母大写;方法名和变量名则使用小驼峰式,首个单词全小写;常量全大写,单词间用下划线分隔。包...

    java判断编码方式

    在Java编程语言中,判断文件或字符串的编码方式是一个常见的需求。这主要涉及到字符集的概念,如ASCII、ISO-8859-1、UTF-8等,它们用于将二进制数据转换为人类可读的字符。在Java中,有多种方法可以用来识别或检测一...

    Java编码规范.doc

    Java编码规范是软件开发中非常重要的一个环节,它旨在提高代码质量、可读性、可维护性和团队协作效率。这份文档,"Java编码规范.doc",由东软集团有限公司的商用软件事业部编写,包含了国内大型Java项目和国际知名...

    Java 安全编码.pdf

    Java 安全编码 Java 安全编码是 Java 开发语言中的一项重要考虑因素。Java 安全编码的主要目标是保护 Web 应用程序免受各种攻击和漏洞的影响。下面是 Java 安全编码的详细知识点: 1. SQL 注入攻击 SQL 注入攻击...

    百度java编码规范

    除了以上所述,百度的Java编码规范可能还包括异常处理、错误处理、日志记录、资源管理等方面的要求,这些都是为了保证代码的健壮性和稳定性。遵循这些规范,可以使代码更加规范,提升代码质量,减少潜在的bug,同时...

    java编码规范,非常详细

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

Global site tag (gtag.js) - Google Analytics