// 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去解码,大部分情况都是乱码。
分享到:
相关推荐
Java中的Pattern和Matcher是正则表达式的核心工具类,它们在处理字符串匹配和模式查找时起着关键作用。本文将深入解析这两个类的功能、用法以及相关知识点。 首先,Pattern类是Java.util.regex包下的一个类,它代表...
英语音标简记法是学习英语发音的重要工具,它帮助我们准确地读出单词,提升听力和口语能力。本文将详细介绍几种常见的英语音标简记方法,并通过举例帮助理解。 首先,我们来看“去尾法”。这种方法适用于那些以元音...
### 练习简记第一期知识点总结 #### 练习1——聚函数 **题目描述:** 本题考察了SQL语言中的聚合函数及其使用规则。具体来说,题目给出了一条SQL查询语句,并询问该语句是否合法以及其含义。 **SQL语句:** ```...
简记个人博客网站源码为博主现有博客网站,前端采用LayUI框架,此分享版本为asp + access。所有功能齐全,欢迎使用。 使用方法:上传至空间或服务器,通过IIS发布网站即可。 演示地址:...
【简记个人博客网站源码 v2.10.01.rar】是一个包含个人博客网站完整源码的压缩包,版本号为v2.10.01,它主要用于搭建和自定义个人博客平台。这个源码可能由前端界面、后端服务器逻辑以及数据库结构组成,适用于那些...
497476974884240简记.apk
从数据头到校验码前的CRC16-CCITT的校验值,遵循大端排序方式的规定。CRC16-CCITT码生成多项式为x16+x12+x5+1,简记式1021。
【USACO课文学习简记1】 USACO(USA Computing Olympiad)是美国计算机奥林匹克竞赛,旨在培养高中生的编程和算法能力。这篇学习简记主要涵盖了四个章节,分别是Ad Hoc Problems(杂题)、Complete Search(完全...
七年级英语音标简记法PPT教案.pptx
这篇简记涵盖了计算机组成原理中的多个重要知识点,主要包括程序控制I/O、中断嵌套、内存层次结构、平均访问时间计算、磁盘容量计算、指令格式设计、存储器组织、数据依赖性、指令流水线以及缓存操作。 1. **程序...
高中历史之历史百科简记美国“飞虎队”在云南素材
标题中的“log4jdbc-log4j2配置简记”指的是在Java开发中使用log4jdbc-log4j2库来监控和记录SQL查询的过程。log4jdbc是一个开源项目,它允许开发者通过日志系统来追踪数据库操作,而log4j2是log4j的升级版,提供了更...
这四大概念通常被简记为“A-PIE”。抽象是指在设计对象时只展示其重要特征而不包括背景细节。多态是指一个接口对应多个实现。继承是指一个类的对象能够获取另一个类对象的属性。封装则是隐藏对象的属性和行为,只...
【知识点详解】 1. 盐类的溶解性规律: ...这些简记规律和知识点是高中化学学习的基础,对于理解和解决化学问题至关重要。理解并熟练掌握这些规则有助于提升解题能力,并为大学化学学习打下坚实基础。
此外,"Java 简记.md"可能是一个Markdown格式的文档,总结了Java语言的关键概念、语法或技巧,便于快速查阅。"README.md"是常见的项目介绍文件,通常会提供项目概述、安装指南、运行说明等信息。 通过这个代码库,...
中考知识要点简记归纳之人教版初一数学知识点总结.pdf
在JavaServer Pages (JSP) 技术中,七大标准动作是开发动态网页的重要组成部分。这些动作提供了在页面上操作数据、控制流程和与服务器交互的功能。以下是对JSP七大标准动作的详细解释: 1. **** 这个动作用于在...
线性规划(Linear Programming,简称LP)是一种优化技术,用于在满足一组线性约束的情况下,最大化或最小化一个线性目标函数。它是运筹学的一个关键分支,对解决实际生活中的资源分配问题有着广泛的应用。...
【学习简记】这篇文档主要涵盖了多个IT领域的学习记录,包括设计模式、Java 8、RocketMQ、RPC机制、Scala编程语言以及前端框架Vue.js。接下来,我们将详细探讨这些知识点。 首先,设计模式是软件工程中的一种最佳...