JAVA基础——字符编码

                           字符编码

一、概述

InputStreamReader

OutputStreamWriter

字符转换流是字符流与字节流转换的桥梁,同时加入了编码转换

二、编码表的由来

计算机只能识别二进制数据,早期由来是电信号;

为了方便应用计算机,识别各个国家的文字;

就将各个国家的文字用数字来表示,并一一对应,形成一张表,这就是编码表。

三、常见的编码表

注意:

1、Java语言char类型使用的是Unicode

2、UTF-8每一个字节的开头都加有标识头,加完后很容易区分。UTF-8中汉字用3个字节表示。

3、中文码表兼容ASCII码表(中文中有拼音)。

四、转换流的编码应用

1、可以将字符以指定编码格式存储。

2、可以对文本数据指定编码格式来解决。

3、指定编码的动作由构造函数完成,构造方法如下:

InputStreamReader(InputStream in, String charsetName)
          创建使用指定字符集的 InputStreamReader
OutputStreamWriter(OutputStream out, String charsetName)
          创建使用指定字符集的 OutputStreamWriter

五、编码与解码

1、定义

编码:String→byte[] —-> byte[] getBytes(Charset)

解码: byte[]→String—->String(byte[],charsetName)

String(byte[], int offset, int length,charsetName)

2.图解

注意:

1)如果编码编错了,就无法再解码了。
2)之所以可以再解码是因为ISO8859-1不识别中文,解码的时候保持了数据的原样性。如果开始使用UTF-8解码,由于UTF-8支持中文,解码之后数据就发生了变化,不再是原有数据。
3)Tomcat服务器默认编码就是ISO8859-1,当Tomcat服务器出现乱码时,可以再解码还原数据。
4)用记事本打开文件是解码,因为电脑中的数据都是二进制文件。

3.“联通”现象:在记事本中存入联通,再次打开出现乱码

现象解释:

UTF-8有自己的标识头,如下:

联通的二进制数:

**110**00001

**10**101010

11001101

10101000

刚好“联通”的二进制代码刚好满足UTF-8的标示,再次打开记事本时,其就按UTF-8解码所以造成乱码。

时间: 2024-11-03 22:59:31

JAVA基础——字符编码的相关文章

java语言字符编码问题

上代码 import java.io.*; public class EncodingDemo { public static void main(String[] args) { System.getProperties().list(System.out); try { FileWriter fw=new FileWriter("F:\\workspace\\JavaPrj\\test.txt"); fw.write("小超是个好孩子!"); fw.close(

java/mysql字符编码

碰到java/mysql字符编码问题,后来发现是utf-8编码相关问题, 最开始怀疑是在java springmvc相关框架处理中出现的错误,花费了很多时间去查找.这是思维的狭隘处,应该在整理理一遍,排除变量的方式,了解问题在哪. 幸好有另一台测试机及数据库,在该机器上部署的没有问题. 定位在本机的数据库上. 参考http://my.oschina.net/linland/blog/32525 http://blog.csdn.net/zhaozetu/article/details/86813

java基础---->java中字符编码问题(一)

这里面对java中的字符编码做一个总结,毕竟在项目中会经常遇到这个问题. 文件的编码格式 一.关于中文的二进制字节问题 public static String CHARSET_TEXT = "我爱LL"; // 打印字节的16进制表示 private void printBinarys(byte[] buffer) { for (byte b : buffer) { System.out.print(Integer.toHexString(b & 0xff) + "

Python基础(字符编码与文件处理)

一.了解字符编码的知识储备 1.计算机基础知识(三副图) 2.文本编辑器存取文件的原理(notepad++,Pycharm,word) 打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内容在没保存之前都是存放在内存中的,断电后数据就会丢失.因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到硬盘上. 3.Python解释器执行py文件的与原理,例如python test.py 第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器. 第二阶段:python解释器相当

JAVA中文字符编码问题

JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问 题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经掌握了对付这些字符乱码怪兽的诀窍.可当过段时间,换了个应用或换了个环境,又会碰到那讨厌的火 星文,并再次无所适从.于是下决心好好整理一下中文字符编码问题,以方便自己记忆,也为其他程序员兄弟们提供一份参考. 首先要了解JAVA处理字符的原理.JAVA使用UNICODE来存储字符数据,处理字符时通常有

Python自动化开发课堂笔记【Day03】 - Python基础(字符编码使用,文件处理,函数)

字符编码使用 1. 文本编辑器如何存取文件 文本编辑器相当一个运行在内存中的进程,所以文件内容在编辑未存储时都是在内存中的,尚未存储在硬盘之中,在没有保存之前,所编辑的任何文本都只是一堆字符,没有任何逻辑上的意义,当存储文件的时候需要以一定的编码格式存储于硬盘之中,当进行文件读取的时候也需要以同样的编码格式进行读取到内存之中进行操作,如果存储文件的编码和读取文件的编码不一致则会引起读取过程中的乱码导致文件操作失败. P.S. --> Python解释器执行py文件的原理. Step1. Pyth

004-python基础-字符编码与转码

一.三种编码方式 ASCII:是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号. Unicode(统一码.万国码.单一码):是一种在计算机上使用的字符编码,规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536. UTF-8: 是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:as

Python基础-字符编码

字符编码 Python 解释器在加载.py文件中的代码,会对内容进行编码(默认asciII) ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其它西欧语言,其最多只能用8位来表示(一个字节),即:2^8=256-1,所以,ASCII码最多只能表示255个符号. ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符

python基础 字符编码转换

python2 1 #python2上所有的字符编码都需要先decode到unicode,再从unicode encode到目标编码 2 str_utf8 = "我就是我" 3 print("str_utf-8:我就是我:",str_utf8) 4 #将utf-8转换为unicode 5 str_utf8_to_unicode = str_utf8.decode("utf-8") 6 print(str_utf8_to_unicode) 7 #将