`
benx
  • 浏览: 276182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 编码

    博客分类:
  • java
 
阅读更多

 

先看一个字符串

 

String str = "Hello 简体  繁體   한국어 ";

 

字符串本无编码,就是一个字符串,但是计算机不能保存字符串,只能以二进制的形式保存,所以就会有字符串到二进制的转换动作,这个转换的规则叫编码规则,不同的规则就是不同的编码,比如gbk,gb2312,utf-8

下面看一个例子

 

 

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

public class CharSetTest {

	/**
	 * @param args
	 * @throws UnsupportedEncodingException
	 */
	public static void main(String[] args) throws UnsupportedEncodingException {

		String str = "Hello 简体  繁體   한국어 ";

		toByte(str, Charset.defaultCharset().displayName());
		
		toByte(str, "utf-8");
		
		toByte(str, "utf-16");
		
		toByte(str, "utf-32");

		toByte(str, "gbk");

		toByte(str, "GB2312");

		toByte(str, "iso-8859-1");

	}

	public static void toByte(String str, String charSet) throws UnsupportedEncodingException {
		System.out.println(str + "   " + charSet + ":");
		for (byte b : str.getBytes(charSet)) {
			System.out.print(b + " ");
		}
		System.out.println();
		
		System.out.println(new String(str.getBytes(charSet),charSet));
		System.out.println();
	}

}

 

 

结果输出

Hello 简体  繁體   한국어    UTF-8:
72 101 108 108 111 32 -25 -82 -128 -28 -67 -109 32 32 -25 -71 -127 -23 -85 -108 32 32 32 -19 -107 -100 -22 -75 -83 -20 -106 -76 32 
Hello 简体  繁體   한국어 


Hello 简体  繁體   한국어    utf-8:
72 101 108 108 111 32 -25 -82 -128 -28 -67 -109 32 32 -25 -71 -127 -23 -85 -108 32 32 32 -19 -107 -100 -22 -75 -83 -20 -106 -76 32 
Hello 简体  繁體   한국어 


Hello 简体  繁體   한국어    utf-16:
-2 -1 0 72 0 101 0 108 0 108 0 111 0 32 123 -128 79 83 0 32 0 32 126 65 -102 -44 0 32 0 32 0 32 -43 92 -83 109 -59 -76 0 32 
Hello 简体  繁體   한국어 


Hello 简体  繁體   한국어    utf-32:
0 0 0 72 0 0 0 101 0 0 0 108 0 0 0 108 0 0 0 111 0 0 0 32 0 0 123 -128 0 0 79 83 0 0 0 32 0 0 0 32 0 0 126 65 0 0 -102 -44 0 0 0 32 0 0 0 32 0 0 0 32 0 0 -43 92 0 0 -83 109 0 0 -59 -76 0 0 0 32 
Hello 简体  繁體   한국어 


Hello 简体  繁體   한국어    gbk:
72 101 108 108 111 32 -68 -14 -52 -27 32 32 -73 -79 -13 119 32 32 32 63 63 63 32 
Hello 简体  繁體   ??? 


Hello 简体  繁體   한국어    GB2312:
72 101 108 108 111 32 -68 -14 -52 -27 32 32 -73 -79 63 32 32 32 63 63 63 32 
Hello 简体  繁?   ??? 


Hello 简体  繁體   한국어    iso-8859-1:
72 101 108 108 111 32 63 63 32 32 63 63 32 32 32 63 63 63 32 
Hello ??  ??   ??? 
 

从例子看到,每种编码产生的字符大部分不一样,而且gbk和gb2312对韩文是不支持的,iso-8859-1只是assic的简单扩展,不支持中文。gb2312不支持繁体,gbk支持繁体

具体每种编码的编码范围可以查阅文档,我们常用的大概就utf-8,gbk,gb2312,assic,iso-8859-1

 

关于乱码:

为什么会出现乱码呢?

比如“中文”的utf-8编码为:-28 -72 -83 -26 -106 -121 32   gb2312编码为0 0 78 45 0 0 101 -121 0 0 0 32 ,可以看出两种编码是不一致的,假如以utf-8编码后,以gb2312来解码,那就出现了乱码,所以要防止乱码,必须知道文字以什么格式保存,然后以什么格式取出;

当然也有例外那就是编码之间有包含关系,比如utf-8,gbk,gb2312都支持assic码,对英文生成的编码格式也是一致,在这种情况下互转是没有问题的。

 

 

关于tomcat与iso8859-1

jsp和servlet有几种设置编码的方法:

在jsp中contentType="text/html; charset=gbk"    这个代表页面以gbk编码显示内容

pageEncoding="gbk"   代笔jsp以gbk编码编译成class

 

request.setCharacterEncoding("UTF-8");  

如同new String(request.getParameter("name").getBytes("iso8859-1"),"utf-8");

response.setCharacterEncoding("utf-8");   设置页面显示格式

 

tomcat默认把所有文字都进行ios8859编码,

比如页面编码的格式为utf-8,字符中文编码为-28 -72 -83 -26 -106 -121 32,那么tomcat在传送的过程中如同

new String("中文".getBytes("utf-8"),"iso8859-1");    在页面中你不可以使用 request.getParameter("name");因为这样jvm默认使用了当前环境的编码比如utf-8或gbk等,正确的方式是

new String(request.getParameter("name").getBytes("iso8859-1"),"页面编码");

 

 

 

 

 

 

分享到:
评论

相关推荐

    阿里巴巴java编码规范

    阿里巴巴java编码规范 ,Java 并发编程培训(阿里巴巴) 《阿里巴巴Java开发手册》,首次公开阿里官方Java代码规范标准。这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大...

    华为JAVA编码规范.pdf

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

    腾讯java编码规范

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

    Java编码规范.docx

    Java 编码规范 Java 编码规范是指在 Java 语言中编写代码时需要遵守的一些约定和规则,以确保代码的可读性、可维护性和可扩展性。本文将对 Java 编码规范的主要内容进行详细讲解。 命名风格是 Java 编码规范的重要...

    阿里巴巴 Java 编码指南,Alibaba Java Coding Guidelines​,兼容 Idea 2023.3+

    《阿里巴巴 Java 编码指南》是业界广泛采用的编码规范,旨在提高代码质量和开发效率,尤其对于使用 IntelliJ IDEA 的开发者来说,此指南的兼容性更新至 2023.3+ 版本,确保了最新的开发环境支持。这份指南在 2024 年...

    Java编码规范.doc

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

    Java 编码标准(PDF)

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

    java编码总结1

    【标题】:“Java编码总结1”主要涉及到Java编程语言中的编码问题,这在软件开发中是至关重要的。编码问题往往会导致程序出现难以预料的错误,尤其是处理多国语言或者特殊字符时。Java作为广泛使用的跨平台语言,其...

    百度java编码规范

    **百度Java编码规范** 在软件开发中,遵循一定的编码规范是非常重要的,它能提高代码的可读性,便于团队协作,降低维护成本。百度作为一家技术驱动的公司,也提出了其内部使用的Java编码规范,旨在确保代码的一致性...

    JAVA编码规范试题

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

    js解码 、java编码

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

    公司使用的java编码规范

    Java 编码规范是开发团队遵循的一套标准,旨在提高代码质量、可读性和可维护性。这份规范涵盖了多个方面,包括文件命名、命名规范、Java 文件样式、代码编写格式以及编程技巧和性能优化等。 1. **前言** - 简介:...

    Neusoft公司Java编码规范.rar

    Java编码规范(Java Coding Standard) oiNSFT-BS-OT0105 V3.0 2005-5-11 东软集团有限公司 商用软件事业部 版权所有 中国 沈阳浑南高新技术产业开发区 东软软件园

    JAVA编码规范培训

    JAVA编码规范培训

    java编码规范(华为)

    "java编码规范(华为)" Java编码规范是华为公司为Java语言编程提供的规范性文档,旨在提高编程的规范化和专业化。本规范涵盖了Java语言编程的各个方面,包括排版、注释、命名、编码和JTEST规则和建议。 1. 范围 ...

    java编码规范,非常详细

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

Global site tag (gtag.js) - Google Analytics