`
Joard
  • 浏览: 28655 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java字符集编码简记

阅读更多
// str是utf-8编码的字符串吗?
String str = new String(webPara.getBytes("GBK"), "UTF-8"));

 

如果你回答 no

那么下面的内容你就无需再看了

如果你回答 yes

那么希望你能接着阅读下去

 

关于字符集编码这破事儿,网上已经有很多资料了

但推荐你看看这篇短文 ,它能改变你对java编码的看法。

 

简单地说

String在JVM里是unicode的,任何byte[]到String以及String到byte[]都涉及到字符集编码转换。

byte[] ---> String就是将按某一个编码后的字节数组转换为unicode的字符串,

String ---> byte[]正好相反,它是将unicode的字符串编码为唯一特定字符集编码后的字节数组。

 

public String(byte[] bytes)

public String(byte[] bytes, String charsetName)

这两个String的方法就是完成将bytes“解码”为unicode的String。

前者使用的是jvm默认的字符集编码,而后者是用户指定某一个charsetName,可以是UTF-8,GBK之类的。

两者都是完成specCharset到unicode的过程,而不是说改变编码格式为charsetName指定的字符集编码。

 

public byte[] getBytes()

public byte[] getBytes(String charsetName)

这两个方法就是完成从unicode到指定字符集编码的“转码”过程。

 

以浏览器为例,http的parameter到servlet里后,

应用服务器已经自动完成了new String(parameterBytes, browserSpecCharset)这个过程。

也就是,自动用页面设置的charset“解码”parameterBytes字节数组为unicode的字符串。

 

因此,类似最上面的代码

String str = new String(webPara.getBytes("GBK"), "UTF-8"));

得到的str是用utf-8“解码”经过gbk编码后的字节数组而得到unicode码的字符串。

 

举个例子

“中国”.getBytes("GBK")

“中国”.getBytes("UTF-8")

上述字节数组按十六进制打印出来

//GBK编码为 
// D6 D0 B9 FA


//UTF-8编码为 
// E4 B8 AD E5 9B BD

可以查一下GBK编码表里“中国”两字确是D6D0 B9FA

也可以到http://www.xxcx.org/hzbm/去查询“中国”的utf-8的16进制。

(附件为GBK的汉字表)

这个也说明了getBytes方法完成了unicode到gbk/utf-8的转换。

 

综上所述

String str = new String(aStr.getBytes("GBK"), "UTF-8"));

是无法完成字符集编码转换地,任何一个Java String都是unicode的

对用a编码的字节数组,用b去解码,大部分情况都是乱码。

 

 

  • GBK.zip (49.7 KB)
  • 下载次数: 25
2
1
分享到:
评论

相关推荐

    java Pattern Matcher的理解简记

    Java中的Pattern和Matcher是正则表达式的核心工具类,它们在处理字符串匹配和模式查找时起着关键作用。本文将深入解析这两个类的功能、用法以及相关知识点。 首先,Pattern类是Java.util.regex包下的一个类,它代表...

    英语音标简记法-英语学习

    英语音标简记法是学习英语发音的重要工具,它帮助我们准确地读出单词,提升听力和口语能力。本文将详细介绍几种常见的英语音标简记方法,并通过举例帮助理解。 首先,我们来看“去尾法”。这种方法适用于那些以元音...

    练习简记第一期

    ### 练习简记第一期知识点总结 #### 练习1——聚函数 **题目描述:** 本题考察了SQL语言中的聚合函数及其使用规则。具体来说,题目给出了一条SQL查询语句,并询问该语句是否合法以及其含义。 **SQL语句:** ```...

    简记个人博客源码免费分享

    简记个人博客网站源码为博主现有博客网站,前端采用LayUI框架,此分享版本为asp + access。所有功能齐全,欢迎使用。 使用方法:上传至空间或服务器,通过IIS发布网站即可。 演示地址:...

    简记个人博客网站源码 v2.10.01.rar

    【简记个人博客网站源码 v2.10.01.rar】是一个包含个人博客网站完整源码的压缩包,版本号为v2.10.01,它主要用于搭建和自定义个人博客平台。这个源码可能由前端界面、后端服务器逻辑以及数据库结构组成,适用于那些...

    497476974884240简记.apk

    497476974884240简记.apk

    crc16校验java实现

    从数据头到校验码前的CRC16-CCITT的校验值,遵循大端排序方式的规定。CRC16-CCITT码生成多项式为x16+x12+x5+1,简记式1021。

    usaco课文学习简记1

    【USACO课文学习简记1】 USACO(USA Computing Olympiad)是美国计算机奥林匹克竞赛,旨在培养高中生的编程和算法能力。这篇学习简记主要涵盖了四个章节,分别是Ad Hoc Problems(杂题)、Complete Search(完全...

    七年级英语音标简记法PPT教案.pptx

    七年级英语音标简记法PPT教案.pptx

    17年软院计组试卷简记1

    这篇简记涵盖了计算机组成原理中的多个重要知识点,主要包括程序控制I/O、中断嵌套、内存层次结构、平均访问时间计算、磁盘容量计算、指令格式设计、存储器组织、数据依赖性、指令流水线以及缓存操作。 1. **程序...

    高中历史之历史百科简记美国“飞虎队”在云南素材

    高中历史之历史百科简记美国“飞虎队”在云南素材

    [简单]log4jdbc-log4j2配置简记

    标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...

    CoreJava Interview Question.pdf

    这四大概念通常被简记为“A-PIE”。抽象是指在设计对象时只展示其重要特征而不包括背景细节。多态是指一个接口对应多个实现。继承是指一个类的对象能够获取另一个类对象的属性。封装则是隐藏对象的属性和行为,只...

    高中化学各简记规律.docx

    【知识点详解】 1. 盐类的溶解性规律: ...这些简记规律和知识点是高中化学学习的基础,对于理解和解决化学问题至关重要。理解并熟练掌握这些规则有助于提升解题能力,并为大学化学学习打下坚实基础。

    Java课程实验代码库-内含源码和说明书(可自己修改).zip

    此外,"Java 简记.md"可能是一个Markdown格式的文档,总结了Java语言的关键概念、语法或技巧,便于快速查阅。"README.md"是常见的项目介绍文件,通常会提供项目概述、安装指南、运行说明等信息。 通过这个代码库,...

    中考知识要点简记归纳之人教版初一数学知识点总结.pdf

    中考知识要点简记归纳之人教版初一数学知识点总结.pdf

    jsp标准语法中7大动作 简记(经典)

    在JavaServer Pages (JSP) 技术中,七大标准动作是开发动态网页的重要组成部分。这些动作提供了在页面上操作数据、控制流程和与服务器交互的功能。以下是对JSP七大标准动作的详细解释: 1. **** 这个动作用于在...

    线性规划(Linear Programming 简记 LP

    线性规划(Linear Programming,简称LP)是一种优化技术,用于在满足一组线性约束的情况下,最大化或最小化一个线性目标函数。它是运筹学的一个关键分支,对解决实际生活中的资源分配问题有着广泛的应用。...

    learning:学习简记

    【学习简记】这篇文档主要涵盖了多个IT领域的学习记录,包括设计模式、Java 8、RocketMQ、RPC机制、Scala编程语言以及前端框架Vue.js。接下来,我们将详细探讨这些知识点。 首先,设计模式是软件工程中的一种最佳...

Global site tag (gtag.js) - Google Analytics